home *** CD-ROM | disk | FTP | other *** search
/ Magnum One / Magnum One (Mid-American Digital) (Disc Manufacturing).iso / d27 / inter490.arc / INTERRUP.A < prev    next >
Text File  |  1990-08-04  |  247KB  |  6,718 lines

  1. Interrupt List        Release 90.4    Last change 8/5/90
  2. This compilation is Copyright (c) 1989, 1990 Ralf Brown
  3. ---------------------------------------------
  4. Please redistribute the following files unmodified as a group, in an archive
  5. named INTER490:
  6.     INTERRUP.1ST    the read-me file, containing credits, availability info
  7.     INTERRUP.A    INT 00 through INT 1F \
  8.     INTERRUP.B    INT 20 through INT 27  \ total 380 pages at 60 lines
  9.     INTERRUP.C    INT 28 through INT 5F  / per page, 412 with INTPRINT -p
  10.     INTERRUP.D    INT 60 through INT FF /
  11.     INTERRUP.PRI    a brief introduction to interrupts
  12.     INTPRINT.COM    a simple formatter that also generates the list summary
  13.     INTPRINT.DOC    instructions for INTPRINT
  14.     INTPRINT.C    source code for INTPRINT
  15.     MEMORY.LST    format of the BIOS data area
  16. ---------------------------------------------
  17. If you notice any mistakes or omissions, please let me know!  It is only with
  18. YOUR help that the list can continue to grow at the current rate.  Please send
  19. all changes to me rather than distributing a modified version of the list.
  20.  
  21. Please read the file INTERRUP.1ST before asking me any questions.  You may find
  22. that it's already been addressed.
  23.  
  24.      Ralf Brown
  25.  
  26. ARPA: ralf@cs.cmu.edu
  27. UUCP: {ucbvax,harvard}!cs.cmu.edu!ralf
  28. BIT:  ralf%cs.cmu.edu@cmuccvma
  29. FIDO: Ralf Brown 1:129/3.1
  30.     or post a message to the DR_DEBUG echo
  31. CIS:  >INTERNET:ralf@cs.cmu.edu 
  32.  
  33. I reply to all e-mail submissions and inquiries, but some of my replies bounce
  34. because of bad return paths.  If you don't get a response from me within a
  35. reasonable period of time, send it again with a better return path (starting at
  36. harvard or ucbvax for UUCP, from the ARPA Internet for others).
  37. ---------------------------------------------
  38. See INTERRUP.1ST for the key to system abbreviations and a list of the
  39. trademarks mentioned here.
  40. ---------------------------------------------
  41. DISCLAIMER:  I verify the information contained in this list to the best of my
  42. ability, but I cannot be held responsible for any problems caused by use or
  43. misuse of the information, especially for those functions not officially 
  44. documented.  If it is marked "internal", you should check it carefully to make
  45. sure it works the same way in your version of the software (and please let me
  46. know whether or not it works the same way).  Information marked with "???" is
  47. known to be incomplete or guesswork.
  48. ---------------------------------------------
  49. The use of -> instead of = signifies that the indicated register or register
  50. pair contains a pointer to the specified item, rather than the item itself
  51. ---------------------------------------------
  52. INT 00 - internal hardware - DIVIDE ERROR
  53.    Automatically called at end of DIV or IDIV operation that results in error
  54.    or overflow.   Normally set by DOS to display an error message and abort
  55.    the program.
  56. Notes:    on an 8086/8088, the return address points to the following instruction
  57.     on an 80286/80386, the return address points to the divide instruction
  58. SeeAlso: INT 04
  59. ---------------------------------------------
  60. INT 01 - internal hardware - SINGLE-STEP
  61.    generated at end of each machine instruction if TF bit in FLAGS is set
  62. Notes:    this is what makes the T command of DEBUG work for single-stepping
  63.     not generated after MOV to segment register or POP of segment register
  64.       (unless you have a very early 8088 with a microcode bug)
  65. SeeAlso: INT 03
  66. ---------------------------------------------
  67. INT 01 - 80386+ internal hardware - DEBUGGING EXCEPTIONS
  68.    Instruction address breakpoint fault - will return to execute instruction
  69.    Data address breakpoint trap - will return to following instruction
  70.    General detect fault, debug registers in use
  71.    Task-switch breakpoint trap
  72. ---------------------------------------------
  73. INT 02 - external hardware - NMI (NON-MASKABLE INTERRUPT)
  74.    Generated by NMI signal in hardware.  This signal has various uses:
  75.  
  76.    Breakout switch on hardware debuggers
  77.    Parity error: all except Jr and CONV
  78.    Coprocessor interrupt: all except Jr and CONV
  79.    Keyboard interrupt: Jr, CONV
  80.    I/O channel check: CONV, PS50+
  81.    Disk-controller power-on request: CONV
  82.    System suspend: CONV
  83.    Real-time clock: CONV
  84.    System watch-dog timer, time-out interrupt: PS50+
  85.    DMA timer time-out interrupt: PS50+
  86. ---------------------------------------------
  87. INT 03 - ONE-BYTE INTERRUPT
  88.    generated by opcode CCh
  89. Notes:    generally used to set breakpoints for debuggers
  90.     also used by Turbo Pascal versions 1,2,3 when {$U+} specified
  91. SeeAlso: INT 01
  92. ---------------------------------------------
  93. INT 04 - internal hardware - OVERFLOW
  94.    Generated by INTO instruction if OF flag is set.  If flag is not set, INTO
  95.    is effectively a NOP.
  96. Note:    used to trap any arithmetic errors before the erroneous results
  97.       propagate further through the computation
  98. SeeAlso: INT 00
  99. ---------------------------------------------
  100. INT 05 - PRINT-SCREEN KEY
  101.    automatically called by keyboard scanner when print-screen key is pressed
  102. Notes:    normally executes routine to print the screen, but may call any routine
  103.       that can safely be executed from inside the keyboard scanner
  104.     status and result byte for default handler is at address 0050:0000
  105.       00h not active
  106.       01h PrtSc in progress
  107.       FFh last PrtSc encountered error
  108. ---------------------------------------------
  109. INT 05 - internal hardware - BOUND CHECK FAILED (80186+)
  110.    Generated by BOUND instruction when the value to be tested is less than the
  111.    indicated lower bound or greater than the indicated upper bound.  Returning
  112.    from this interrupt re-executes the failing BOUND instruction.
  113. ---------------------------------------------
  114. INT 06 - internal hardware - UNDEFINED OPCODE (80286+)
  115. ---------------------------------------------
  116. INT 07 - internal hardware - NO MATH UNIT AVAILABLE (80286+)
  117.    automatically called if a coprocessor instruction is encountered when no
  118.    coprocessor is installed
  119. Note:    can be used to emulate a numeric coprocessor in software
  120. SeeAlso: INT 09"MATH UNIT PROTECTION"
  121. ---------------------------------------------
  122. INT 08 - IRQ0 - TIMER INTERRUPT
  123.    Generated 18.2 times per second, this interrupt is used to keep the
  124.    time-of-day clock updated.  Programs which need to be invoked regularly
  125.    should use INT 1C unless they need to reprogram the timer while still
  126.    keeping the time-of-day clock running at the proper rate.
  127. SeeAlso: INT 1C
  128. ---------------------------------------------
  129. INT 08 - internal hardware - DOUBLE FAULT (80286+ protected mode)
  130.    Called when multiple exceptions occur on one instruction, or an exception
  131.    occurs in an exception handler.  If an exception occurs in the double fault
  132.    handler, the CPU goes into SHUTDOWN mode (which circuitry in the PC/AT
  133.    converts to a reset).
  134. ---------------------------------------------
  135. INT 09 - IRQ1 - KEYBOARD INTERRUPT
  136.    Generated when data is received from the keyboard.  This is normally a scan
  137.    code, but may also be an ACK or NAK of a command on AT-class keyboards.
  138. SeeAlso: INT 15/AH=4Fh, INT 15/AH=85h, INT 16, INT 1B
  139. ---------------------------------------------
  140. INT 09 - internal hardware - MATH UNIT PROTECTION FAULT (80286,80386 protected)
  141. SeeAlso: INT 07"NO MATH UNIT"
  142. ---------------------------------------------
  143. INT 09 - internal hardware - RESERVED BY Intel (80486 protected mode)
  144. Note:    this exception has been moved to INT 0D
  145. ---------------------------------------------
  146. INT 0A - IRQ2 - EGA VERTICAL RETRACE
  147. Notes:    the TOPS and PCnet adapters use this interrupt request line by default
  148.     DOS 3.2 revectors IRQ2 to a stack-switching routine
  149.     on ATs and above, the physical data line for IRQ2 is labeled IRQ9 and
  150.       connects to the slave 8259.  The BIOS redirects the interrupt for
  151.       IRQ9 back here.
  152. SeeAlso: INT 71
  153. ---------------------------------------------
  154. INT 0A - IRQ2 - Tandy 1000 HARD DISK
  155. ---------------------------------------------
  156. INT 0A - IRQ2 - ROLAND MPU MIDI INTERFACE
  157. Note:    newer Roland cards and MIDI interfaces by other manufacturers use
  158.       a jumper-selectable IRQ, but software and hardware generally defaults
  159.       to IRQ2
  160. ---------------------------------------------
  161. INT 0A - internal hardware - INVALID TASK STATE SEGMENT (80286+ protected-mode)
  162. ---------------------------------------------
  163. INT 0B - IRQ3 - COM2 INTERRUPT
  164. Notes:    the TOPS and PCnet adapters use this interrupt request line as an
  165.       alternate
  166.     on PS/2's, COM2 through COM8 share this interrupt on many PC's, COM4
  167.       shares this interrupt
  168. SeeAlso: INT 0C
  169. ---------------------------------------------
  170. INT 0B - internal hardware - NOT PRESENT (80286+ protected-mode)
  171.    Generated when loading a segment register if the segment descriptor
  172.    indicates that the segment is not currently in memory.  May be used to
  173.    implement virtual memory.
  174. ---------------------------------------------
  175. INT 0C - IRQ4 - COM1 INTERRUPT
  176. Note:    on many PC's, COM3 shares this interrupt
  177. SeeAlso: INT 0B
  178. ---------------------------------------------
  179. INT 0C - internal hardware - STACK FAULT (80286+)
  180.    Generated on stack overflow/underflow in protected mode.
  181.    Note that the 80286 will shut down in real mode if SP=1 before a push.  On
  182.    the PC AT and compatibles, external circuitry generates a reset on shutdown.
  183. ---------------------------------------------
  184. INT 0D - IRQ5 - FIXED DISK (PC), LPT2 (AT/PS)
  185. ---------------------------------------------
  186. INT 0D - IRQ5 - Tandy 1000 60Hhz RAM REFRESH
  187. ---------------------------------------------
  188. INT 0D - internal hardware - GENERAL PROTECTION VIOLATION (80286+)
  189.    Called in real mode when an instruction attempts to access a word operand
  190.      located at offset FFFFh or a PUSH MEM or POP MEM instruction contains an
  191.      invalid bit encoding in the second byte, or an instruction exceeds the
  192.      maximum length allowed (10 bytes for 80286, 15 bytes for 80386)
  193.    Called on 80486 protected-mode floating-point protection fault
  194. ---------------------------------------------
  195. INT 0E - IRQ6 - DISKETTE INTERRUPT
  196.    Generated by floppy disk controller on completion of an operation
  197. ---------------------------------------------
  198. INT 0E - internal hardware - PAGE FAULT (80386 native mode)
  199.    used to implement virtual memory
  200. ---------------------------------------------
  201. INT 0F - IRQ7 - PRINTER INTERRUPT
  202.    Generated by the LPT1 printer adapter when printer becomes ready.
  203. Notes:    most printer adapters do not reliably generate this interrupt.
  204.     the 8259 interrupt controller generates an interrupt corresponding to
  205.       IRQ7 when an error condition occurs
  206. ---------------------------------------------
  207. INT 10 - internal hardware - COPROCESSOR ERROR (80286+)
  208.    Generated by the CPU when the -ERROR pin is asserted by the coprocessor.
  209.    AT's and clones usually wire the coprocessor to use IRQ13, but not all
  210.    get it right.
  211. SeeAlso: INT 09
  212. ---------------------------------------------
  213. INT 10 - VIDEO - SET VIDEO MODE
  214.     AH = 00h
  215.     AL = mode (graphics mode if graphics resolution listed)
  216.          text  pixel graphic colors disp scrn  system
  217.          resol    box  resoltn        page addr
  218.        00h = 40x25    8x8           B&W     8 B800 CGA
  219.            = 40x25    8x14           B&W     8 B800 ATI VIP
  220.        01h = 40x25    8x8            16     8 B800 CGA
  221.            = 40x25    8x14            16     8 B800 ATI VIP
  222.        02h = 80x25    8x8           B&W     4 B800 CGA
  223.            = 80x25    8x8           B&W     8 B800 EGA,MCGA,VGA
  224.            = 80x25    8x14           B&W     8 B800 ATI VIP
  225.        03h = 80x25    8x8            16     4 B800 CGA
  226.            = 80x25    8x8            16     8 B800 EGA,MCGA,VGA
  227.        04h = 40x25    8x8   320x200    4     1 B800 CGA
  228.        05h = 40x25    8x8   320x200 4 gray   1 B800 CGA
  229.        06h = 80x25    8x8   640x200  B&W     1 B800 CGA
  230.        07h = 80x25    9x14          mono     1 B000 MDA,Hercules
  231.            = 80x25                   8      EGA,VGA
  232.            = 80x25    9x14          mono     B000 ATI VIP
  233.        08h = 20x25    8x8   160x200   16     B800 PCjr,Tandy 1000
  234.            = 132x25 8x8            16     B800 ATI EGA/VGA Wonder **
  235.            = 132x25 8x8          mono     B000 ATI EGA/VGA Wonder **
  236.        09h = 40x25    8x8   320x200   16     B800 PCjr,Tandy 1000
  237.        0Ah = 80x25    8x8   640x200    4     B800 PCjr,Tandy 1000
  238.        0Bh = reserved (used internally by EGA BIOS)
  239.        0Ch = reserved (used internally by EGA BIOS)
  240.        0Dh = 40x25    8x8   320x200   16     8 A000 EGA,VGA
  241.        0Eh = 80x25    8x8   640x200   16     4 A000 EGA,VGA
  242.        0Fh = 80x25    8x14  640x350 mono     2 A000 EGA,VGA
  243.        10h = 80x25    8x14  640x350 4or16    2 A000 EGA,VGA
  244.        11h = 80x30    8x16  640x480 mono     A000 VGA,MCGA,ATI EGA,ATI VIP
  245.        12h = 80x30    8x16  640x480  16/256k     A000 VGA,ATI VIP
  246.            = 80x30    8x16  640x480  16/64     A000 ATI EGA Wonder
  247.        13h = 40x25    8x8   320x200 256/256k     A000 VGA,MCGA,ATI VIP
  248.        14h = 80x25    8x8   640x200              Lava Chrome II EGA
  249.            =          640x400   16          Tecmar VGA/AD
  250.        15h = 80x25    8x14  640x350              Lava Chrome II EGA
  251.        16h = 80x25    8x14  640x350              Lava Chrome II EGA
  252.            =          800x600   16          Tecmar VGA/AD
  253.        17h = 80x34    8x14  640x480              Lava Chrome II EGA
  254.            = 132x25                      Tecmar VGA/AD
  255.        18h = 132x44 8x8          mono          Tseng Labs EVA
  256.            = 132x44 8x8          16/256   2 B000 Tseng ET4000 chipset
  257.            = 80x34    8x14  640x480              Lava Chrome II EGA
  258.            =         1024x768   16          Tecmar VGA/AD
  259.        19h = 132x25 8x14          mono          Tseng Labs EVA
  260.            = 132x25 8x14          16/256   4 B000 Tseng ET4000 chipset
  261.        1Ah = 132x28 8x13          mono          Tseng Labs EVA
  262.            = 132x28 8x13          16/256   4 B000 Tseng ET4000 chipset
  263.            =          640x350  256          Tecmar VGA/AD
  264.        1Bh =          640x400  256          Tecmar VGA/AD
  265.        1Ch =          640x480  256          Tecmar VGA/AD
  266.        1Dh =          800x600  256          Tecmar VGA/AD
  267.        21h = 80x43    8x8   720x348 mono          DESQview 2.x+Hercules ***
  268.        22h = 132x44 8x8                  Tseng Labs EVA
  269.            = 132x44 8x8          16/256   2 B800 Tseng ET4000 chipset
  270.            = 132x44 8x8                  Ahead Systems EGA2001
  271.            = 132x43                      Allstar Peacock (VGA)
  272.            = 132x44             16          Orchid Prodesigner VGA
  273.            = 80x43    8x8   720x348 mono          DESQview 2.x+Hercules ***
  274.        23h = 132x25 6x14                  Tseng Labs EVA
  275.            = 132x25 8x14          16/256   4 B800 Tseng ET4000 chipset
  276.            = 132x25 8x14                  Ahead Systems EGA2001
  277.            = 132x25 8x8            16     B800 ATI EGA Wonder,ATI VIP
  278.            = 132x28                      Allstar Peacock (VGA)
  279.            = 132x28                16          Orchid Prodesigner VGA
  280.        24h = 132x28 6x13                  Tseng Labs EVA
  281.            = 132x28 8x13          16/256   4 B800 Tseng ET4000 chipset
  282.            = 132x25                      Allstar Peacock (VGA)
  283.            = 132x25             16          Orchid Prodesigner VGA
  284.        25h = 80x60    8x8   640x480              Tseng Labs EVA
  285.            = 80x60  8x8   640x480 16/256   1 A000 Tseng ET4000 chipset
  286.            =          640x480   16          VEGA VGA
  287.            = 80x60    8x8   640x480   16     A000 Orchid Prodesigner VGA
  288.        26h = 80x60    8x8                  Tseng Labs EVA
  289.            = 80x60  8x8          16/256   2 B800 Tseng ET4000 chipset
  290.            = 80x60    8x8   640x480              Ahead Systems EGA2001
  291.            = 80x60                      Allstar Peacock (VGA)
  292.            = 80x60                 16          Orchid ProDesigner VGA
  293.        27h =          720x512   16          VEGA VGA
  294.            =          720x512   16          Genoa
  295.            = 132x25 8x8          mono     B000 ATI EGA Wonder,ATI VIP
  296.        28h = ???x???                  VEGA VGA
  297.        29h =          800x600   16          VEGA VGA
  298.            = 100x37 8x16  800x600   16     A000 Orchid
  299.            =          800x600   16     A000 STB,Genoa,Sigma
  300.            =          800x600   16          Allstar Peacock (VGA)
  301.            = 100x37 8x16  800x600 16/256   1 A000 Tseng ET4000 chipset
  302.        2Ah = 100x40                   Allstar Peacock (VGA)
  303.            = 100x40 8x16            16          Orchid Prodesigner VGA
  304.            = 100x40 8x15          16/256   4 B800 Tseng ET4000 chipset
  305.        2Dh =          640x350  256          VEGA VGA
  306.            =          640x350 256/256k     A000 Orchid, Genoa, STB
  307.            = 80x25  8x14  640x350 256/256k 1 A000 Tseng ET4000 chipset
  308.        2Eh =          640x480  256          VEGA VGA
  309.            = 80x30    8x16  640x480 256/256k     A000 Orchid
  310.            =          640x480 256/256k     A000 STB,Genoa,Sigma
  311.            = 80x30  8x16  640x480 256/256k 1 A000 Tseng ET4000 chipset
  312.        2Fh =          720x512  256          VEGA VGA
  313.            =          720x512  256          Genoa
  314.            = 80x25  8x16  640x400 256/256k 1 A000 Tseng ET4000 chipset
  315.        30h =          800x600  256          VEGA VGA
  316.            = 100x37 8x16  800x600 256/256k     A000 Orchid 
  317.            =          800x600 256/256k     A000 STB,Genoa,Sigma
  318.            =          720x350    2          3270 PC
  319.            =          800x600  256          Cardinal
  320.            =          ???x???         B800 AT&T 6300
  321.            = 100x37 8x16  800x600 256/256k 1 A000 Tseng ET4000 chipset
  322.        33h = 132x44 8x8            16     B800 ATI EGA Wonder,ATI VIP
  323.        36h =          960x720   16          VEGA VGA
  324.            =          960x720   16          STB
  325.        37h =         1024x768   16          VEGA VGA
  326.            = 128x48 8x16 1024x768   16     A000 Orchid
  327.            =         1024x768   16     A000 STB,Genoa,Sigma
  328.            = 132x44 8x8          mono     B800 ATI EGA Wonder,ATI VIP
  329.        38h =         1024x768  256          STB VGA/EM-16 Plus (1MB)
  330.            = 128x48 8x16 1024x768 256/256k 1 A000 Tseng ET4000 chipset
  331.        40h = 80x25    8x16  640x400    2     1 B800 AT&T 6300, AT&T VDC600
  332.            = 80x25    8x16  640x400    2     1 B800 Compaq Portable
  333.            = 80x43                      VEGA VGA, Tecmar VGA/AD
  334.            = 80x43                      Video7 V-RAM VGA
  335.            = 80x43                      Tatung VGA
  336.        41h =          640x200   16     1      AT&T 6300
  337.            = 132x25                   VEGA VGA
  338.            = 132x25                      Tatung VGA
  339.            = 132x25                      Video7 V-RAM VGA
  340.        42h = 80x25    8x16  640x400   16          AT&T 6300, AT&T VDC600
  341.            = 132x43                   VEGA VGA
  342.            = 132x43                      Tatung VGA
  343.            = 132x43                      Video7 V-RAM VGA
  344.        43h = unsupported  640x200 of 640x400 viewport  AT&T 6300
  345.            = 80x60                      VEGA VGA
  346.            = 80x60                      Tatung VGA
  347.            = 80x60                      Video7 V-RAM VGA
  348.        44h = disable VDC and DEB output          AT&T 6300
  349.            = 100x60                   VEGA VGA
  350.            = 100x60                   Tatung VGA
  351.            = 100x60                      Video7 V-RAM VGA
  352.        45h = 132x28                      Tatung VGA
  353.            = 132x28                      Video7 V-RAM VGA
  354.        46h = 100x40 8x15  800x600    2          AT&T VDC600
  355.        47h = 100x37 8x16  800x600   16          AT&T VDC600
  356.        48h = 80x50    8x8   640x400    2     B800 AT&T 6300, AT&T VDC600
  357.        49h = 80x30    8x16  640x480              Lava Chrome II EGA
  358.        4Dh = 120x25                   VEGA VGA
  359.        4Eh = 120x43                   VEGA VGA
  360.        4Fh = 132x25                   VEGA VGA
  361.        50h = 132x25 9x14          mono          Ahead Systems EGA2001
  362.            = 80x30    8x16  640x480   16          Paradise EGA-480
  363.            = 80x43              mono          VEGA VGA
  364.            =          640x480 mono???          Taxan 565 EGA
  365.            = 80x34                      Lava Chrome II EGA
  366.            = 132x25 8x14            16     8 B800 OAK Technologies VGA-16
  367.        51h = 80x30    8x16                  Paradise EGA-480
  368.            = 80x30                      Lava Chrome II EGA
  369.            = 80x34    8x14  640x480   16          ATI EGA Wonder
  370.            = 132x25           mono          VEGA VGA
  371.            = 132x43 8x8             16     5 B800 OAK Technologies VGA-16
  372.        52h = 132x44 9x8          mono          Ahead Systems EGA2001
  373.            = 132x43           mono          VEGA VGA
  374.            = 94x29    8x14  752x410   16          ATI EGA Wonder
  375.            = 80x60                      Lava Chrome II EGA
  376.            = 100x75    8x8   800x600   16     1 A000 OAK Technologies VGA-16
  377.        53h = 100x40 8x14  800x560   16          ATI EGA Wonder,ATI VIP
  378.            = 132x43                   Lava Chrome II EGA
  379.        54h = 132x43 8x8                  Paradise EGA-480
  380.            = 132x43 7x9          16/256k     B800 Paradise VGA
  381.            = 132x43 8x9          16/256k     B800 Paradise VGA on multisync
  382.            = 132x43                      Taxan 565 EGA
  383.            = 132x43                      AST VGA Plus
  384.            = 132x43                      Hewlett-Packard D1180A
  385.            = 132x43 7x9            16          AT&T VDC600
  386.            = 132x25                   Lava Chrome II EGA
  387.            = 100x42 8x14  800x600   16     A000 ATI EGA Wonder, VGA Wondr
  388.        55h = 132x25 8x14                  Paradise EGA-480
  389.            = 132x25 7x16          16/256k     B800 Paradise VGA
  390.            = 132x25 8x16          16/256k     B800 Paradise VGA on multisync
  391.            = 132x25                      Taxan 565 EGA
  392.            = 132x25                      AST VGA Plus
  393.            = 132x25                      Hewlett-Packard D1180A
  394.            = 132x25 7x16            16          AT&T VDC600
  395.            = 80x66    8x8          16/256k     A000 ATI VIP
  396.            = 94x29    8x14  752x410              Lava Chrome II EGA
  397.            = 128x48 8x16 1024x768 16/256k     A000 ATI VGA Wonder v4+  *!
  398.        56h = 132x43 8x8          3???     2 B000 NSI Smart EGA+
  399.            = 132x43 7x9             4     B000 Paradise VGA
  400.            = 132x43 8x9             4     B000 Paradise VGA on multisync
  401.            = 132x43           mono          Taxan 565 EGA
  402.            = 132x43 7x9             2          AT&T VDC600
  403.        57h = 132x25 8x14          3???     4 B000 NSI Smart EGA+
  404.            = 132x25 7x16             4     B000 Paradise VGA
  405.            = 132x25 8x16             4     B000 Paradise VGA on multisync
  406.            = 132x25           mono          Taxan 565 EGA
  407.            = 132x25 7x16             2          AT&T VDC600
  408.        58h = 100x75 8x8   800x600 16/256k     A000 Paradise VGA
  409.            = 100x75 8x8   800x600   16          AT&T VDC600
  410.            = 80x33    8x14            16     B800 ATI EGA Wonder,ATI VIP
  411.            =          800x600   16          AST VGA Plus, Compaq VGA
  412.            =          800x600   16          Dell VGA
  413.            =          800x600   16          Hewlett-Packard D1180A
  414.        59h = 100x75 8x8   800x600    2     A000 Paradise VGA
  415.            = 100x75 8x8   800x600    2          AT&T VDC600
  416.            = 80x66    8x8          16/256k     A000 ATI VIP
  417.            =          800x600    2          AST VGA Plus, Compaq VGA
  418.            =          800x600    2          Dell VGA
  419.            =          800x600    2          Hewlett-Packard D1180A
  420.        5Bh =          800x600   16          Maxxon, SEFCO TVGA, Imtec
  421.            =          640x350  256          Genoa 6400
  422.            = 80x30  8x16             B800 ATI VGA Wonder (undoc)
  423.        5Ch =          640x400  256          Logix, ATI Prism Elite
  424.            =          640x400  256          Maxxon, SEFCO TVGA, Imtec
  425.            =          640x400  256          Zymos Poach
  426.            =          640x480  256          Genoa 6400
  427.        5Dh =          640x480  256          Logix, ATI Prism Elite
  428.            =          640x480  256          Maxxon, SEFCO TVGA, Imtec
  429.            =          640x480  256          Zymos Poach
  430.        5Eh =          640x400  256          Paradise VGA,VEGA VGA
  431.            =          640x400  256          AST VGA Plus
  432.            =          640x400  256          Compaq VGA, Dell VGA
  433.            = 80x25    8x16  640x400  256          AT&T VDC600
  434.            =          800x600   16          Logix, ATI Prism Elite
  435.            =          800x600  256          Genoa 6400
  436.            =          800x600  256          Zymos Poach
  437.        5Fh =          640x480  256          Paradise VGA
  438.            =          640x480  256          AST VGA Plus
  439.            =          640x480  256          Compaq VGA, Dell VGA
  440.            =          640x480  256          Hewlett-Packard D1180A
  441.            = 80x30    8x16  640x480  256          AT&T VDC600 (512K)
  442.            =         1024x768   16          Logix, ATI Prism Elite
  443.            =         1024x768   16          Maxxon, Genoa 6400, Imtec
  444.            =         1024x768   16          Zymos Poach
  445.        60h = 80x???       ???x400              Corona/Cordata BIOS 4.10+
  446.            =          752x410              VEGA VGA
  447.            =          752x410   16          Tatung VGA
  448.            =          752x410   16          Video7 V-RAM VGA
  449.            =          640x400  256          Ahead B
  450.        61h =          ???x400              Corona/Cordata BIOS 4.10+
  451.            =          720x540              VEGA VGA
  452.            =          720x540   16          Tatung VGA
  453.            =          720x540   16          Video7 V-RAM VGA
  454.            =          640x400  256     A000 ATI VGA Wonder
  455.            =          640x480  256          Ahead B
  456.        62h =          800x600              VEGA VGA
  457.            =          800x600   16          Tatung VGA
  458.            =          800x600   16          Video7 V-RAM VGA
  459.            =          640x480  256     A000 ATI VGA Wonder
  460.            =          800x600  256          Ahead B
  461.        63h =         1024x768    2          Video7 V-RAM VGA
  462.            =          800x600  256     A000 ATI VGA Wonder
  463.            =         1024x768  256          Ahead B (1MB)
  464.        64h =         1024x768    4          Video7 V-RAM VGA
  465.        65h =         1024x768   16          Video7 V-RAM VGA
  466.            =         1024x768   16     A000 ATI VGA Wonder
  467.        66h =          640x400  256          Tatung VGA
  468.            =          640x400  256          Video7 V-RAM VGA
  469.        67h =          640x480  256          Video7 V-RAM VGA
  470.            =         1024x768    4     A000 ATI VGA Wonder
  471.        69h =          720x540  256          Video7 V-RAM VGA
  472.        6Ah =          800x600   16          VESA standard interface
  473.            =          800x600   16          Ahead B, Genoa 6400
  474.            =          800x600   16          Zymos Poach
  475.            = 100x42 8x14  800x600         A000 ATI VGA Wonder (undoc)
  476.        70h =          800x600   16          Cardinal
  477.            = extended mode set (see AX=0070h)     Everex Micro Enhancer EGA
  478.        71h = 100x35 8x16  800x600 16of64     A000 NSI Smart EGA+
  479.            =          960x720   16          Cardinal
  480.        72h =         1024x768   16          Cardinal
  481.        74h =          640x400    2     B800 Toshiba 3100 AT&T mode
  482.            =         1024x768   16          Ahead B
  483.        78h =          640x400  256          STB VGA/EM-16 Plus
  484.            =          640x400  256          Cardinal
  485.        79h =          640x480  256          Cardinal
  486.        7Ah =          720x540  256          Cardinal
  487.        7Ch =          512x512   16          Genoa
  488.        7Dh =          512x512  256          Genoa
  489.        7Eh = special mode set (see AX=007Eh)      Paradise VGA, AT&T VDC600
  490.        7Fh = special function set (see AX=007Fh)  Paradise VGA, AT&T VDC600
  491.        82h = 80x25               B&W          AT&T VDC overlay mode *
  492.        83h = 80x25                      AT&T VDC overlay mode *
  493.        86h =          640x200  B&W          AT&T VDC overlay mode *
  494.        C0h =          640x400  2/prog pallet  AT&T VDC overlay mode *
  495.        C4h = disable output               AT&T VDC overlay mode *
  496.        D0h =          640x400    2     B800 DEC VAXmate AT&T mode
  497.  
  498.  *  for AT&T VDC overlay modes, BL contains the DEB mode, which may be 06h,
  499.       40h, or 44h
  500.  ** for ATI EGA Wonder, mode 08h is only valid if SMS.COM is loaded resident.
  501.       SMS maps mode 08h to mode 27h if the byte at location 0040:0063 is 0B4h,
  502.       otherwise to mode 23h, thus selecting the appropriate (monochrome or
  503.       color) 132x25 character mode.
  504.     for ATI VGA Wonder, mode 08h is the same, and only valid if VCONFIG loaded
  505.       resident
  506.  *** DESQview intercepts calls to change into these two modes (21h is page 0,
  507.       22h is page 1) even if there is no Hercules graphics board installed
  508.  *! ATI BIOS v4-1.00 has a text-scrolling bug in this mode
  509.  
  510. Notes:    IBM standard modes do not clear the screen if the high bit of AL is set
  511.     the Tseng ET4000 chipset is used by the Orchid Prodesigner II, Diamond
  512.       SpeedSTAR VGA, Groundhog Graphics Shadow VGA
  513. SeeAlso: AX=0070h,007Eh,6F05h
  514. ---------------------------------------------
  515. INT 10 - VIDEO - Everex Micro Enhancer EGA - EXTENDED MODE SET
  516.     AX = 0070h
  517.     BL = mode (graphics mode if graphics resolution listed)
  518.          text  pixel graphic color disp scrn  monitor
  519.          resol    box  resoltn       page addr
  520.        00h =         640x480  16          multisync'ing
  521.        01h =         752x410  16          multisync'ing
  522.        02h =         800x600  16          multisync'ing
  523.        03h = 80x34                      multisync'ing
  524.        04h = 80x60                      multisync'ing
  525.        05h = 94x29                      multisync'ing
  526.        06h = 94x51                      multisync'ing
  527.        07h = reserved
  528.        08h = reserved
  529.        09h = 80x44                      EGA
  530.        0Ah = 132x25                   EGA
  531.        0Bh = 132x44                   EGA
  532.        0Ch = 132x25                   CGA
  533.        0Dh = 80x44                      mono
  534.        0Eh = 132x25                   mono
  535.        0Fh = 132x44                   mono
  536.        10h = reserved
  537.        11h =        1280x350   4
  538.        12h =        1280x600   4
  539.        13h =         640x350 256
  540.        14h =         640x400 256
  541.        15h =         512x480 256
  542.        20h =        1024x768  16          (Everex 678 only)
  543.        30h =         640x480 256          (Everex 678 only)
  544.        31h =         800x600 256          (Everex 678 only)
  545. ---------------------------------------------
  546. INT 10 - VIDEO - Paradise VGA, AT&T VDC600 - SET SPECIAL MODE
  547.     AX = 007Eh
  548.     BX = The horizontal dimension of the mode desired
  549.     CX = The vertical dimension of the mode desired
  550.          (both BX/CX in pixels for graphics modes, rows for alpha modes)
  551.     DX = The number of colors of the mode desired
  552.          (use 0 for monochrome modes)
  553. Return: BH = 7Eh if successful (Paradise VGA)
  554.     AL = 7Eh if successful (AT&T VDC600)
  555. SeeAlso: AH=00h,AX=0070h,007Fh,6F05h
  556. ---------------------------------------------
  557. INT 10 - VIDEO - Paradise VGA, AT&T VDC600 - EXTENDED FUNCTIONS
  558.     AX = 007Fh
  559.     BH = 00h  set VGA operation
  560.     BH = 01h  set non-VGA operation
  561.         color modes (0,1,2,3,4,5,6) will set non-VGA CGA operation.
  562.         monochrome mode 7 will set non-VGA MDA/Hercules operation.
  563.     BH = 02h  query mode status
  564.         Return: BL = 00h if operating in VGA mode, 01h if non-VGA mode.
  565.             CH = total video RAM size in 64k byte units.
  566.             CL = video RAM used by the current mode.
  567.     BH = 03h  lock current mode
  568.         allows current mode (VGA or non-VGA) to survive re-boot.
  569.     BH = 04h  enter CGA mode (AT&T VDC600 only)
  570.     BH = 05h  enter MDA mode (AT&T VDC600 only)
  571.     BH = 0Ah,0Bh,0Ch,0Dh,0Eh,0Fh  WRITE PARADISE REGISTERS 0,1,2,3,4,5
  572.         (port 03CEh indices 0Ah,0Bh,0Ch,0Dh,0Eh,0Fh)
  573.         BL = value to set in the paradise register.
  574.     BH = 1Ah,1Bh,1Ch,1Dh,1Eh,1Fh READ PARADISE REGISTERS 0,1,2,3,4,5
  575.         (port 03CEh indices 0Ah,0Bh,0Ch,0Dh,0Eh,0Fh)
  576.         Return: BL = value of the paradise register.
  577.             BH = 7Fh if successful.
  578. Return: AL = 7Fh if successful (AT&T VDC600)
  579. SeeAlso: AX=007Eh
  580. ---------------------------------------------
  581. INT 10 - VIDEO - SET CURSOR CHARACTERISTICS
  582.     AH = 01h
  583.     CH bits 0-4 = start line for cursor in character cell
  584.        bits 5-6 = blink attribute
  585.              (00=normal, 01=invisible, 10=slow, 11=fast on CGA/mono)
  586.              (00=normal, other=invisible on EGA/VGA)
  587.     CL bits 0-4 = end line for cursor in character cell
  588. Note:    buggy on EGA systems--BIOS remaps cursor shape in 43 line modes, but
  589.       returns unmapped cursor shape
  590. BUG:    AMI 386 BIOS and AST Premier 386 BIOS will lock up the system if AL
  591.       is not equal to the current video mode
  592. SeeAlso: AH=03h
  593. ---------------------------------------------
  594. INT 10 - VIDEO - SET CURSOR POSITION
  595.     AH = 02h
  596.     DH,DL = row, column (0,0 = upper left)
  597.     BH = page number
  598.         0 in graphics modes
  599.         0-3 in modes 2&3
  600.         0-7 in modes 0&1
  601. SeeAlso: AH=03h
  602. ---------------------------------------------
  603. INT 10 - VIDEO - READ CURSOR POSITION
  604.     AH = 03h
  605.     BH = page number
  606.         0 in graphics modes
  607.         0-3 in modes 2&3
  608.         0-7 in modes 0&1
  609. Return: DH,DL = row,column
  610.     CH = cursor start line
  611.     CL = cursor end line
  612. SeeAlso: AH=01h,02h
  613. ---------------------------------------------
  614. INT 10 - VIDEO - READ LIGHT PEN POSITION (all but PS)
  615.     AH = 04h
  616. Return: AH = 00h light pen switch not activated
  617.        = 01h light pen values in registers
  618.         DH,DL = row,column of current position
  619.         CH = raster line (0-199) (EGA) old graphics modes
  620.         CX = (EGA) raster line (0-nnn) new graphics modes
  621.         BX = pixel column (0-319 or 0-639)
  622. ---------------------------------------------
  623. INT 10 - VIDEO - SELECT DISPLAY PAGE
  624.     AH = 05h
  625.     AL = display page
  626.         0-7  for modes 0 & 1
  627.         0-3  for modes 2 & 3
  628. SeeAlso: AH=0Fh
  629. ---------------------------------------------
  630. INT 10 - PCjr VIDEO - CRT/CPU PAGE REGISTERS
  631.     AH = 05h
  632.     AL =
  633.         80h read CRT/CPU page registers
  634.         81h set CPU page register
  635.         BL = new page register value
  636.         82h set CRT page register
  637.         BH = new page register value
  638.         83h set both display registers
  639.         BL = new CPU page register
  640.         BH = new CRT page register
  641. Return: BH = CRT page register
  642.     BL = CPU page register
  643. ---------------------------------------------
  644. INT 10 - VIDEO - GRAPHICS BITMAP BUFFER (Corona/Cordata BIOS v4.10+)
  645.     AH = 05h
  646.     AL =
  647.         00h set address of graphics bitmap buffer (video modes 60h,61h)
  648.         BX = segment of buffer
  649.         0Fh get address of graphics bitmap buffer (video modes 60h,61h)
  650.         Return: DX = segment of graphics bitmap buffer
  651. ---------------------------------------------
  652. INT 10 - VIDEO - SCROLL PAGE UP
  653.     AH = 06h
  654.     AL = number of lines to scroll window (0 = blank whole window)
  655.     BH = attributes to be used on blanked lines
  656.     CH,CL = row,column of upper left corner of window to scroll
  657.     DH,DL = row,column of lower right corner of window
  658. Warning: some implementations have a bug which destroys BP
  659. SeeAlso: AH=07h,72h,73h
  660. ---------------------------------------------
  661. INT 10 - VIDEO - SCROLL PAGE DOWN
  662.     AH = 07h
  663.     AL = number of lines to scroll window (0 = blank whole window)
  664.     BH = attributes to be used on blanked lines
  665.     CH,CL = row,column of upper left corner of window to scroll
  666.     DH,DL = row,column of lower right corner of window
  667. Warning: some implementations have a bug which destroys BP
  668. SeeAlso: AH=06h,72h,73h
  669. ---------------------------------------------
  670. INT 10 - VIDEO - READ ATTRIBUTES/CHARACTER AT CURSOR POSITION
  671.     AH = 08h
  672.     BH = display page
  673. Return: AL = character
  674.     AH = attribute of character (alpha modes)
  675. SeeAlso: AH=09h
  676. ---------------------------------------------
  677. INT 10 - VIDEO - WRITE ATTRIBUTES/CHARACTERS AT CURSOR POSITION
  678.     AH = 09h
  679.     AL = character
  680.     BH = display page
  681.     BL = attributes of character (alpha modes) or color (graphics modes)
  682.          if bit 7 set in graphics mode, character is xor'ed onto screen
  683.     CX = number of times to write character
  684. Note:    all characters are displayed, including CR, LF, and BS
  685. SeeAlso: AH=08h,0Ah
  686. ---------------------------------------------
  687. INT 10 - VIDEO - WRITE CHARACTERS ONLY AT CURSOR POSITION
  688.     AH = 0Ah
  689.     AL = character
  690.     BH = display page - alpha mode
  691.     BL = color of character (graphics mode, PCjr only)
  692.          if bit 7 set in graphics mode, character is xor'ed onto screen
  693.     CX = number of times to write character
  694.          (EGA) in graphics modes, replication count in CX works correctly
  695.          only if all character written are contains on the same row
  696. Note:    all characters are displayed, including CR, LF, and BS
  697. SeeAlso: AH=08h,09h
  698. ---------------------------------------------
  699. INT 10 - VIDEO - SET COLOR PALETTE
  700.     AH = 0Bh
  701.     BH = 00h
  702.         BL = border color (0-15) (text modes)
  703.          border color and background color (graphics modes)
  704.         (EGA)
  705.         BL = border color (0-15) and high-intensity background color
  706.           (16-31??? maybe should be high nybble?)
  707.     BH = 01h
  708.         BL = palette (0-3)
  709. ---------------------------------------------
  710. INT 10 - VIDEO - WRITE DOT ON SCREEN
  711.     AH = 0Ch
  712.     AL = color of dot (0/1 in mode 6, 0-3 in modes 4 and 5)
  713.          if bit 7 set, new color will be XORed with current pixel
  714.     BH = display page (ignored if mode only supports one page)
  715.     CX = column
  716.     DX = row
  717. Note:    only valid in graphics modes
  718. SeeAlso: AH=0Dh
  719. ---------------------------------------------
  720. INT 10 - VIDEO - READ DOT ON SCREEN
  721.     AH = 0Dh
  722.     BH = display page (ignored if mode only supports one page)
  723.     CX = column
  724.     DX = row
  725. Return: AL = color read
  726. Note:    only valid in graphics modes
  727. SeeAlso: AH=0Ch
  728. ---------------------------------------------
  729. INT 10 - VIDEO - WRITE CHARACTER AND ADVANCE CURSOR (TTY WRITE)
  730.     AH = 0Eh
  731.     AL = character
  732.     BH = display page (alpha modes)
  733.     BL = foreground color (graphics modes)
  734. Note:    characters 07h (BEL), 08h (BS), 0Ah (LF), and 0Dh (CR) are interpreted
  735.       and do the expected things
  736. SeeAlso: AH=02h,0Ah
  737. ---------------------------------------------
  738. INT 10 - VIDEO - GET CURRENT VIDEO MODE
  739.     AH = 0Fh
  740. Return: AH = number of columns on screen
  741.     AL = current video mode (see INT 10/AH=00h)
  742.     BH = current active display page
  743. Note:    if mode was set with bit 7 set ("no blanking"), the returned mode will
  744.     also have bit 7 set
  745. SeeAlso: AH=00h,05h
  746. ---------------------------------------------
  747. INT 10 - VUIMG DISPLAY DRIVER (v2.20 and below)
  748.     AX = 0F56h
  749.     BX = 4756h
  750.     CX = 4944h
  751.     DL = function
  752.         01h installation check
  753.         Return: AX = 5649h
  754.             BX = 4443h
  755.             CX = 5647h
  756.             DH = 01h
  757.         02h get first video mode's parameters
  758.         Return: AX = BIOS mode number
  759.             BX = widht in pixels
  760.             CX = height in pixels
  761.             DX = number of colors
  762.         03h get next video mode's parameters
  763.         Return: as for DL=02h
  764.         04h display line???
  765.         ES:DI -> record (see below)
  766.         ???
  767.         Return: ???
  768.  
  769. Format of record for DL=04h:
  770. Offset    Size    Description
  771.  00h    WORD    row number
  772.  02h    WORD    starting column???
  773.  04h    WORD    ending column???
  774.     ???
  775. ---------------------------------------------
  776. INT 10 - VIDEO - SET PALETTE REGISTER (Jr, PS, TANDY 1000, EGA, VGA)
  777.     AX = 1000h
  778.     BL = palette register to set
  779.     BH = color value to store
  780. Note:    on MCGA, only BX = 0712h is supported
  781. SeeAlso: AX=1002h,1007h
  782. ---------------------------------------------
  783. INT 10 - VIDEO - SET BORDER COLOR REGISTER (Jr, PS, TANDY 1000, EGA, VGA)
  784.     AX = 1001h
  785.     BH = color value to store
  786. SeeAlso: AX=1008h
  787. ---------------------------------------------
  788. INT 10 - VIDEO - SET ALL PALETTE REGISTERS (Jr, PS, TANDY 1000, EGA, VGA)
  789.     AX = 1002h
  790.     ES:DX -> 17-byte palette register list (see below)
  791. SeeAlso: AX=1000h,1009h
  792.  
  793. Format of palette register list:
  794. Offset    Size    Description
  795.  00h 16 BYTEs    values for palette registers 0-15
  796.  10h    BYTE    value for border color register
  797. ---------------------------------------------
  798. INT 10 - VIDEO - TOGGLE INTENSITY/BLINKING BIT (Jr, PS, TANDY 1000, EGA, VGA)
  799.     AX = 1003h
  800.     BL = 00h enable intensity
  801.        = 01h enable blink
  802. ---------------------------------------------
  803. INT 10 - VIDEO - GET INDIVIDUAL PALETTE REGISTER (VGA)
  804.     AX = 1007h
  805.     BL = palette register number
  806. Return: BH = palette register value
  807. SeeAlso: AX=1000h,1009h
  808. ---------------------------------------------
  809. INT 10 - VIDEO - READ OVERSCAN (BORDER COLOR) REGISTER (VGA)
  810.     AX = 1008h
  811. Return: BH = value
  812. SeeAlso: AX=1001h
  813. ---------------------------------------------
  814. INT 10 - VIDEO - READ ALL PALETTE REGISTERS AND OVERSCAN REGISTER (VGA)
  815.     AX = 1009h
  816.     ES:DX -> 17-byte buffer (see AX=1002h)
  817. SeeAlso: AX=1002h,1007h
  818. ---------------------------------------------
  819. INT 10 - VIDEO - SET INDIVIDUAL DAC REGISTER (EGA, VGA/MCGA)
  820.     AX = 1010h
  821.     BX = register number
  822.     CH = new value for green (0-63)
  823.     CL = new value for blue (0-63)
  824.     DH = new value for red (0-63)
  825. SeeAlso: AX=1012h,1015h
  826. ---------------------------------------------
  827. INT 10 - VIDEO - SET BLOCK OF DAC REGISTERS (EGA, VGA/MCGA)
  828.     AX = 1012h
  829.     BX = starting color register
  830.     CX = number of registers to set
  831.     ES:DX -> table of 3*CX bytes where each 3 byte group represents one
  832.          byte each of red, green and blue (0-63)
  833. SeeAlso: AX=1010h,1017h
  834. ---------------------------------------------
  835. INT 10 - VIDEO - SELECT VIDEO DAC COLOR PAGE (VGA)
  836.     AX = 1013h
  837.     BL = 00h Select paging mode
  838.         BH = 00h Select 4 blocks of 64
  839.         BH = 01h Select 16 blocks of 16
  840.     BL = 01h Select Page
  841.         BH = page number (00h to 03h) or (00h to 0Fh)
  842. Note:    not valid in mode 13h
  843. SeeAlso: AX=101Ah
  844. ---------------------------------------------
  845. INT 10 - VIDEO - READ INDIVIDUAL DAC REGISTER (EGA, VGA/MCGA)
  846.     AX = 1015h
  847.     BL = palette register number
  848. Return: DH = red value
  849.     CH = green value
  850.     CL = blue value
  851. SeeAlso: AX=1010h,1017h
  852. ---------------------------------------------
  853. INT 10 - VIDEO - READ BLOCK OF DAC REGISTERS (EGA, VGA/MCGA)
  854.     AX = 1017h
  855.     BX = starting palette register
  856.     CX = number of palette registers to read
  857.     ES:DX -> buffer (3 * CX bytes in size) (see also AX=1012h)
  858. Return: CX number of red, green and blue triples in buffer
  859. SeeAlso: AX=1012h,1015h
  860. ---------------------------------------------
  861. INT 10 - VIDEO - undocumented - SET PEL MASK (EGA, VGA/MCGA)
  862.     AX = 1018h
  863.     BL = new PEL value
  864. SeeAlso: AX=1019h
  865. ---------------------------------------------
  866. INT 10 - VIDEO - undocumented - READ PEL MASK (EGA, VGA/MCGA)
  867.     AX = 1019h
  868. Return:    BL = value read
  869. SeeAlso: AX=1018h
  870. ---------------------------------------------
  871. INT 10 - VIDEO - GET VIDEO DAC COLOR-PAGE STATE (VGA)
  872.     AX = 101Ah
  873. Return: BL = paging mode
  874.         00h four pages of 64
  875.         01h sixteen pages of 16
  876.     BH = current page
  877. SeeAlso: AX=1013h
  878. ---------------------------------------------
  879. INT 10 - VIDEO - PERFORM GRAY-SCALE SUMMING (EGA, VGA/MCGA)
  880.     AX = 101Bh
  881.     BX = starting palette register
  882.     CX = number of registers to convert
  883. SeeAlso: AH=12h/BL=33h
  884. ---------------------------------------------
  885. INT 10 - VIDEO - TEXT-MODE CHARACTER GENERATOR FUNCTIONS (PS, EGA, VGA)
  886.     AH = 11h
  887.     The following functions will cause a mode set, completely resetting
  888.     the video environment, but without clearing the video buffer
  889.     AL = 00h, 10h: load user-specified patterns
  890.         ES:BP -> user table
  891.         CX      = count of patterns to store
  892.         DX      = character offset into map 2 block
  893.         BL      = block to load in map 2
  894.         BH      = number of bytes per character pattern
  895.     AL = 01h, 11h: load ROM monochrome patterns (8 by 14)
  896.         BL      = block to load
  897.     AL = 02h, 12h: load ROM 8 by 8 double-dot patterns
  898.         BL      = block to load
  899.     AL = 03h: set block specifier
  900.         BL      = block specifier
  901.            (EGA/MCGA) bits 0,1 = block selected by chars with attribute
  902.                      bit 3 = 0
  903.                   bits 2,3 = block selected by chars with attribute
  904.                      bit 3 = 1
  905.            (VGA) bits 0,1,4 = block selected by attribute bit 3 = 0
  906.              bits 2,3,5 = block selected by attribute bit 3 = 1
  907.     AL = 04h, 14h: load ROM 8x16 character set (VGA)
  908.     The routines called with AL=1xh are designed to be called only
  909.     immediately after a mode set and are similar to the routines called
  910.     with AL=0xh, except that:
  911.           Page 0 must be active.
  912.           Bytes/character is recalculated.
  913.           Max character rows is recalculated.
  914.           CRT buffer length is recalculated.
  915.           CRTC registers are reprogrammed as follows:
  916.              R09 = bytes/char-1 ; max scan line (mode 7 only)
  917.              R0A = bytes/char-2 ; cursor start
  918.              R0B = 0        ; cursor end
  919.              R12 = ((rows+1)*(bytes/char))-1 ; vertical display end
  920.              R14 = bytes/char    ; underline loc
  921.                (*** BUG: should be 1 less ***)
  922. ---------------------------------------------
  923. INT 10 - VIDEO - GRAPHICS-MODE CHARACTER GENERATOR FUNCTIONS (PS, EGA, VGA)
  924.     AH = 11h
  925.     AL = 20h: set user 8 by 8 graphics characters (INT 1Fh)
  926.         ES:BP -> user table
  927.     AL = 21h: set user graphics characters
  928.         ES:BP -> user table
  929.         CX      = bytes per character
  930.         BL      = row specifier
  931.            00h user set
  932.               DL = number of rows
  933.            01h 14 rows
  934.            02h 25 rows
  935.            03h 43 rows
  936.     AL = 22h: ROM 8 by 14 set
  937.         BL = row specifier
  938.     AL = 23h: ROM 8 by 8 double dot
  939.         BL = row specifier
  940.     AL = 24h: load 8x16 graphics characters (VGA/MCGA)
  941.         BL = row specifier
  942. Note:    these functions are meant to be called only after a mode set
  943. ---------------------------------------------
  944. INT 10 - VIDEO - GET FONT INFORMATION (EGA, MCGA, VGA)
  945.     AX = 1130h
  946.     BH = pointer specifier
  947.         00h INT 1Fh pointer
  948.         01h INT 44h pointer
  949.         02h ROM 8 by 14 character font pointer
  950.         03h ROM 8 by 8 double dot font pointer
  951.         04h ROM 8 by 8 DD font (top half)
  952.         05h ROM alpha alternate (9 by 14) pointer
  953. Return: ES:BP = specified pointer
  954.     CX    = bytes/character
  955.     DL    = character rows on screen
  956. ---------------------------------------------
  957. INT 10 - VIDEO - ALTERNATE FUNCTION SELECT (PS, EGA, VGA, MCGA) - GET EGA INFO
  958.     AH = 12h
  959.     BL = 10h
  960. Return: BH = 00h color mode in effect (I/O port 3Dxh)
  961.            01h mono mode in effect (I/O port 3Bxh)
  962.     BL = 00h  64k bytes memory installed
  963.          01h 128k bytes memory installed
  964.          02h 192k bytes memory installed
  965.          03h 256k bytes memory installed
  966.     CH = feature bits
  967.     CL = switch settings
  968. ---------------------------------------------
  969. INT 10 - VIDEO - ALTERNATE FUNCTION SELECT (PS,EGA,VGA,MCGA) - ALTERNATE PRTSC
  970.     AH = 12h
  971.     BL = 20h  select alternate print screen routine
  972. SeeAlso: INT 05
  973. ---------------------------------------------
  974. INT 10 - VIDEO - ALTERNATE FUNCTION SELECT (VGA) - SELECT VERTICAL RESOLUTION
  975.     AH = 12h
  976.     BL = 30h
  977.     AL = vertical resolution
  978.          00h 200 scan lines
  979.          01h 350 scan lines
  980.          02h 400 scan lines
  981. Return: AL = 12h if function supported
  982. ---------------------------------------------
  983. INT 10 - VIDEO - ALTERNATE FUNCTION SELECT (VGA, MCGA) - PALETTE LOADING
  984.     AH = 12h
  985.     BL = 31h
  986.     AL = 00h enable default palette loading
  987.          01h disable default palette loading
  988. Return: AL = 12h if function supported
  989. ---------------------------------------------
  990. INT 10 - VIDEO - ALTERNATE FUNCTION SELECT (VGA, MCGA) - VIDEO ADDRESSING
  991.     AH = 12h
  992.     BL = 32h
  993.     AL = 00h enable video addressing
  994.          01h disable video addressing
  995. Return: AL = 12h if function supported
  996. ---------------------------------------------
  997. INT 10 - VIDEO - ALTERNATE FUNCTION SELECT (VGA, MCGA) - GRAY-SCALE SUMMING
  998.     AH = 12h
  999.     BL = 33h
  1000.     AL = 00h enable gray scale summing
  1001.          01h disable gray scale summing
  1002. Return: AL = 12h if function supported
  1003. SeeAlso: AX=101Bh
  1004. ---------------------------------------------
  1005. INT 10 - VIDEO - ALTERNATE FUNCTION SELECT (VGA) - CURSOR EMULATION
  1006.     AH = 12h
  1007.     BL = 34h
  1008.     AL = 00h enable alphanumeric cursor emulation
  1009.          01h disable alphanumeric cursor emulation
  1010. Return: AL = 12h if function supported
  1011. ---------------------------------------------
  1012. INT 10 - VIDEO - ALTERNATE FUNCTION SELECT (PS) - DISPLAY-SWITCH INTERFACE
  1013.     AH = 12h
  1014.     BL = 35h
  1015.     AL = 00h initial adapter video off
  1016.          01h initial planar video on
  1017.          02h switch active video off
  1018.          03h switch inactive video on
  1019.          80h *UNDOCUMENTED* set system board video active flag
  1020.     ES:DX = buffer (128 byte save area if AL = 0, 2 or 3)
  1021. Return: AL = 12h if function supported
  1022. ---------------------------------------------
  1023. INT 10 - VIDEO - ALTERNATE FUNCTION SELECT (PS, VGA) - VIDEO REFRESH CONTROL
  1024.     AH = 12h
  1025.     BL = 36h
  1026.     AL = 00h enable refresh
  1027.          01h disable refresh
  1028. Return: AL = 12h if function supported
  1029. ---------------------------------------------
  1030. INT 10 - VIDEO - ALTERNATE FUNC SELECT (ATI,Tatung,Taxan) - ENHANCED FEATURES
  1031.     AH = 12h
  1032.     BH = 55h
  1033.     BL = subfunction
  1034.         00h disabled enhanced features
  1035.         01h enable enhanced features
  1036.         02h get status
  1037.         Return: AL = status flags
  1038.                 bit 3: set if enhanced features enabled
  1039.                 bits 7-5 monitor type
  1040.                 000 PS/2 mono
  1041.                 001 PS/2 color
  1042.                 010 multi-sync
  1043.                 011 Taxan 650 25kHz
  1044.                 100 RGB
  1045.                 101 mono
  1046.                 110 EGA
  1047.                 111 Compaq internal
  1048.         03h disable register trapping (CGA emulation)
  1049.         04h enable register trapping
  1050.         05h program mode described by table at ES:BP
  1051.         06h get mode table
  1052.         AL = video mode
  1053.         Return: ES:BP -> table suitable for mode AL (and subfnc BL=05h)
  1054.             BP = FFFFh on error
  1055.  
  1056. Format of ATI VGA Wonder video mode table:
  1057. Offset    Size    Description
  1058.  00h    BYTE    number of columns
  1059.  01h    BYTE    maximum row (number of rows - 1)
  1060.  02h    BYTE    scan lines per row
  1061.  03h    WORD    video buffer size in bytes
  1062.  05h  4 BYTEs    values for Sequencer registers 1-4
  1063.  09h    BYTE    value for Miscellaneous Output register
  1064.  0Ah 25 BYTEs    values for CRTC registers 00h-18h
  1065.         00h horizontal total size (chars)
  1066.         01h horizontal displayed (chars)
  1067.         02h horizontal sync position (chars)
  1068.         03h horizontal sync width (chars)
  1069.         04h vertical total size (char rows)
  1070.         05h vertical total adjust (scan lines)
  1071.         06h vertical displayed (char rows)
  1072.         07h vertical sync position (char rows)
  1073.         08h interlace mode
  1074.         09h max scan line in row
  1075.         0Ah cursor start scan line
  1076.         0Bh cursor end scan line
  1077.         0Ch screen memory start (high)
  1078.         0Dh screen memory start (low)
  1079.         0Eh cursor address (high)
  1080.         0Fh cursor address (low)
  1081.         10h light pen (high)
  1082.         11h light pen (low)
  1083.  23h 20 BYTEs    default palette (values for Attribute Controller regs 00h-13h)
  1084.  37h  9 BYTEs    values for Graphics Controller registers 00h-08h
  1085. ---------------------------------------------
  1086. INT 10 - VIDEO - WRITE STRING (AT,XT286,PS,EGA,VGA)
  1087.     AH = 13h
  1088.     AL = mode
  1089.         bit 1: set if string contains alternating characters and attributes
  1090.         bit 0: set in order to move cursor after write
  1091.     BL = attribute if AL bit 1 clear
  1092.     BH = display page number
  1093.     DH,DL = row,column of starting cursor position
  1094.     CX = length of string
  1095.     ES:BP -> start of string
  1096. Note:    recognizes CR, LF, BS, and bell
  1097. SeeAlso: AH=09h,0Ah
  1098. ---------------------------------------------
  1099. INT 10 - VIDEO - LOAD USER-SPECIFIED LCD CHARACTER FONT (CONVERTIBLE)
  1100.     AX = 1400h
  1101.     ES:DI -> character font
  1102.     BH = number of bytes per character
  1103.     BL = 00h load main font (block 0)
  1104.          01h load alternate font (block 1)
  1105.     CX = number of characters to store
  1106.     DX = character offset into RAM font area
  1107. SeeAlso: AH=11h,AX=1401h
  1108. ---------------------------------------------
  1109. INT 10 - VIDEO - LOAD SYSTEM ROM DEFAULT LCD CHARACTER FONT (CONVERTIBLE)
  1110.     AX = 1401h
  1111.     BL = 00h load main font (block 0)
  1112.          01h load alternate font (block 1)
  1113. SeeAlso: AH=11h,AX=1400h
  1114. ---------------------------------------------
  1115. INT 10 - VIDEO - SET MAPPING OF LCD HIGH INTENSITY ATTRIBUTES (CONVERTIBLE)
  1116.     AX = 1402h
  1117.     BL = 00h ignore high intensity attribute
  1118.          01h map high intensity to underscore
  1119.          02h map high intensity to reverse video
  1120.          03h map high intensity to selected alternate font
  1121. ---------------------------------------------
  1122. INT 10 - VIDEO - GET PHYSICAL DISPLAY PARAMETERS (CONVERTIBLE)
  1123.     AH = 15h
  1124. Return: AX = alternate display adapter type
  1125.         0000h none
  1126.         5140h LCD
  1127.         5153h CGA
  1128.         5151h mono
  1129.     ES:DI -> parameter table (see below)
  1130. SeeAlso: AH=1Bh
  1131.  
  1132. Format of display parameter table:
  1133. Offset    Size    Description
  1134.  00h    WORD    monitor model number
  1135.  02h    WORD    vertical pixels per meter
  1136.  04h    WORD    horizontal pixels per meter
  1137.  06h    WORD    total vertical pixels
  1138.  08h    WORD    total horizontal pixels
  1139.  0Ah    WORD    horizontal pixel separation in micrometers
  1140.  0Ch    WORD    vertical pixel separation in micrometers
  1141. ---------------------------------------------
  1142. INT 10 - VIDEO - SET SUPERIMPOSE MODE (Sperry PC)
  1143.     AH = 15h
  1144.     AL = superimpose mode
  1145.         00h show graphics screen
  1146.         01h show text screen
  1147.         02h show text screen superimposed on graphics screen
  1148. ---------------------------------------------
  1149. INT 10 - VIDEO - DISPLAY COMBINATION (PS,VGA/MCGA)
  1150.     AH = 1Ah
  1151.     AL = 00h read display combination code
  1152.         Return: BL = active display code (see below)
  1153.             BH = alternate display code
  1154.          01h set display combination code
  1155.         BL = active display code (see below)
  1156.         BH = alternate display code
  1157. Return: AL = 1Ah if function was supported
  1158.  
  1159. Values for display combination code:
  1160.     00h no display
  1161.     01h monochrome adapter w/ monochrome display
  1162.     02h CGA w/ color display
  1163.     03h reserved
  1164.     04h EGA w/ color display
  1165.     05h EGA w/ monochrome display
  1166.     06h PGA w/ color display
  1167.     07h VGA w/ monochrome analog display
  1168.     08h VGA w/ color analog display
  1169.     09h reserved
  1170.     0Ah MCGA w/ digital color display
  1171.     0Bh MCGA w/ monochrome analog display
  1172.     0Ch MCGA w/ color analog display
  1173.     FFh unknown display type
  1174. ---------------------------------------------
  1175. INT 10 - VIDEO - FUNCTIONALITY/STATE INFORMATION (PS,VGA/MCGA)
  1176.     AH = 1Bh
  1177.     BX = implementation type
  1178.        = 0000h return funtionality/state information
  1179.     ES:DI -> 64 byte buffer for state information (see below)
  1180. Return: AL = 1Bh if function supported
  1181.         ES:DI buffer filled with state information
  1182. SeeAlso: AH=15h
  1183.  
  1184. Format of state information:
  1185. Offset    Size    Description
  1186.  00h    DWORD    address of static funtionality table (see below)
  1187.  04h    BYTE    video mode in effect
  1188.  05h    WORD    number of columns
  1189.  07h    WORD    length of regen buffer in bytes
  1190.  09h    WORD    starting address of regen buffer
  1191.  0Bh    WORD    cursor position for page 0
  1192.  0Dh    WORD    cursor position for page 1
  1193.  0Fh    WORD    cursor position for page 2
  1194.  11h    WORD    cursor position for page 3
  1195.  13h    WORD    cursor position for page 4
  1196.  15h    WORD    cursor position for page 5
  1197.  17h    WORD    cursor position for page 6
  1198.  19h    WORD    cursor position for page 7
  1199.  1Bh    WORD    cursor type
  1200.  1Dh    BYTE    active display page
  1201.  1Eh    WORD    CRTC port address
  1202.  20h    BYTE    current setting of register (3?8)
  1203.  21h    BYTE    current setting of register (3?9)
  1204.  22h    BYTE    number of rows
  1205.  23h    WORD    bytes/character
  1206.  25h    BYTE    DCC of active display
  1207.  26h    BYTE    DCC of alternate display
  1208.  27h    WORD    number of colors supported in current mode
  1209.  29h    WORD    number of pages supported in current mode
  1210.  2Ah    BYTE    number of scan lines active
  1211.         (0,1,2,3) = (200,350,400,480)
  1212.  2Bh    BYTE    primary character block
  1213.  2Ch    BYTE    secondary character block
  1214.  2Dh    BYTE    miscellaneous flags
  1215.         bit 0 all modes on all displays on
  1216.             1 gray summing on
  1217.             2 monochrome display attached
  1218.             3 default palette loading disabled
  1219.             4 cursor emulation enabled
  1220.             5 0 = intensity; 1 = blinking
  1221.             6 reserved
  1222.             7 reserved
  1223.  2Eh  3 BYTEs    reserved
  1224.  31h    BYTE    video memory available
  1225.         00h = 64K, 01h = 128K, 02h = 192K, 03h = 256K
  1226.  32h    BYTE    save pointer state flags
  1227.         bit 0 512 character set active
  1228.             1 dynamic save area present
  1229.             2 alpha font override active
  1230.             3 graphics font override active
  1231.             4 palette override active
  1232.             5 DCC override active
  1233.             6 reserved
  1234.             7 reserved
  1235.  33h 13 BYTEs    reserved
  1236.  
  1237. Format of Static Functionality Table:
  1238. Offset    Size    Description
  1239.  00h    BYTE    modes supported #1
  1240.         bit 0 to bit 7 = 1 modes 0,1,2,3,4,5,6 supported
  1241.  01h    BYTE    modes supported #2
  1242.         bit 0 to bit 7 = 1 modes 8,9,0Ah,0Bh,0Ch,0Dh,0Eh,0Fh supported
  1243.  02h    BYTE    modes supported #3
  1244.         bit 0 to bit 3 = 1 modes 10h,11h,12h,13h supported
  1245.         bit 4 to bit 7 reserved
  1246.  03h  4 BYTEs    reserved
  1247.  07h    BYTE    scan lines supported
  1248.         bit 0 to bit 2 = 1 if scan lines 200,350,400 supported
  1249.  08h    BYTE    total number of character blocks available in text modes
  1250.  09h    BYTE    maximum number of active character blocks in text modes
  1251.  0Ah    BYTE    miscellaneous function flags #1
  1252.         bit 0 all modes on all displays function supported
  1253.             1 gray summing function supported
  1254.             2 character font loading function supported
  1255.             3 default palette loading enable/disable supported
  1256.             4 cursor emulation function supported
  1257.             5 EGA palette present
  1258.             6 color palette present
  1259.             7 color paging function supported
  1260.  0Bh    BYTE    miscellaneous function flags #2
  1261.         bit 0 light pen supported
  1262.             1 save/restore state function 1Ch supported
  1263.             2 intensity blinking function supported
  1264.             3 Display Combination Code supported
  1265.           4-7 reserved
  1266.  0Ch    WORD    reserved
  1267.  0Eh    BYTE    save pointer function flags
  1268.         bit 0 512 character set supported
  1269.             1 dynamic save area supported
  1270.             2 alpha font override supported
  1271.             3 graphics font override supported
  1272.             4 palette override supported
  1273.             5 DCC extension supported
  1274.             6 reserved
  1275.             7 reserved
  1276.  0Fh    BYTE    reserved
  1277. ---------------------------------------------
  1278. INT 10 - VIDEO - SAVE/RESTORE VIDEO STATE (PS50+,VGA)
  1279.     AH = 1Ch
  1280.     AL = 00h return state buffer size
  1281.         Return: BX = number of 64 byte blocks needed
  1282.          01h save video state
  1283.         ES:BX -> buffer
  1284.          02h restore video state
  1285.         ES:BX -> buffer containing previously saved state
  1286.     CX = requested states
  1287.          bit 0 video hardware
  1288.          1 BIOS data areas
  1289.          2 color registers and DAC state
  1290.           3-15 reserved
  1291. Return: AL = 1Ch if function supported
  1292. ---------------------------------------------
  1293. INT 10 - VIDEO - LOCATE 3270PC CONFIGURATION TABLE
  1294.     AX = 3000h
  1295.     CX = 0000h
  1296.     DX = 0000h
  1297. Return: CX:DX -> 3270PC configuration table (see below for format)
  1298.     CX:DX = 0000h:0000h if 3270PC Control Program not active
  1299.  
  1300. Format of 3270 PC configuration table:
  1301. Offset    Size    Description
  1302.  00h    BYTE    aspect ratio X
  1303.  01h    BYTE    aspect ratio Y
  1304.  02h    BYTE    monitor type
  1305.         00h = 5151 (mono) or 5272 (color)
  1306.         01h = 3295
  1307.         02h = 5151 or 5272 with XGA (???) graphics adapter
  1308.         03h = 5279 with 3270PC G adapter
  1309.         04h = 5379 model C01 with 3270PC GX adapter
  1310.         05h = 5379 model M01 with 3270PC GX adapter
  1311.         07h = non-3270PC with 3270 Workstation Program
  1312.         FFh = 3270PC Control Program not loaded
  1313.  03h    BYTE    reserved
  1314.  04h    BYTE    adapter ID
  1315.         00h = 5151/5272 adapter
  1316.         04h = 5151/5272 with XGA adapter
  1317.         30h = 3295 or 3270PC G/GX adapter
  1318.  05h    BYTE    reserved
  1319.  06h    BYTE    function flags 1
  1320.         bit 7: mono text, 1 page
  1321.             6: color text, 1 page
  1322.             5: color text, 4 pages
  1323.             4: CGA color graphics
  1324.             3: 720x350 two-color graphics
  1325.             2: 360x350 four-color graphics
  1326.             1: 720x350 eight-color graphics
  1327.  07h    BYTE    function flags 2
  1328.         bit 6: GPI graphics supported
  1329.  08h    WORD    segment address of Control Program Level table (see below)
  1330.  0Ah 10 BYTEs    reserved
  1331.  
  1332. Format of Control Program Level table:
  1333. Offset    Size    Description
  1334.  00h    WORD    02xxh = 3270PC Control Program v2.xx
  1335.         03xxh = 3270PC Control Program v3.xx
  1336.         04xxh = 3270 Workstation Program v1.xx
  1337.  02h    BYTE    Control Program ID (00h)
  1338.  03h 27 BYTEs    Control Program Descriptor ("IBM 3270 PC CONTROL PROGRAM")
  1339. ---------------------------------------------
  1340. INT 10 - VIDEO - SET GRAPHICS MODE (Hercules GRAFIX)
  1341.     AH = 40h
  1342. SeeAlso: AH=41h
  1343. ---------------------------------------------
  1344. INT 10 - VIDEO - SET TEXT MODE (Hercules GRAFIX)
  1345.     AH = 41h
  1346. SeeAlso: AH=40h
  1347. ---------------------------------------------
  1348. INT 10 - VIDEO - CLEAR CURRENT PAGE (Hercules GRAFIX)
  1349.     AH = 42h
  1350. ---------------------------------------------
  1351. INT 10 - VIDEO - SELECT DRAWING PAGE (Hercules GRAFIX)
  1352.     AH = 43h
  1353.     AL = page number (0,1)
  1354. SeeAlso: AH=45h
  1355. ---------------------------------------------
  1356. INT 10 - VIDEO - SELECT DRAWING FUNCTION (Hercules GRAFIX)
  1357.     AH = 44h
  1358.     AL = drawing function
  1359.         00h clear pixels
  1360.         01h set pixels
  1361.         02h invert pixels
  1362. ---------------------------------------------
  1363. INT 10 - VIDEO - SELECT PAGE TO DISPLAY (Hercules GRAFIX)
  1364.     AH = 45h
  1365.     AL = page number (0,1)
  1366. SeeAlso: AH=43h
  1367. ---------------------------------------------
  1368. INT 10 - VIDEO - DRAW ONE PIXEL (Hercules GRAFIX)
  1369.     AH = 46h
  1370.     DI = x (0-720)
  1371.     BP = y (0-347)
  1372. Note:    function 44h determines operation and function 43h which page to use
  1373. SeeAlso: AH=47h
  1374. ---------------------------------------------
  1375. INT 10 - VIDEO - FIND PIXEL VALUE (Hercules GRAFIX)
  1376.     AH = 47h
  1377.     DI = x (0-720)
  1378.     BP = y (0-347)
  1379. Return: AL = 00h pixel clear
  1380.     AL = 01h pixel set
  1381. Note:    function 43h specifies which page is used
  1382. SeeAlso: AH=46h
  1383. ---------------------------------------------
  1384. INT 10 - VIDEO - MOVE TO POINT (Hercules GRAFIX)
  1385.     AH = 48h
  1386.     DI = x (0-720)
  1387.     BP = y (0-347)
  1388. SeeAlso: AH=49h
  1389. ---------------------------------------------
  1390. INT 10 - VIDEO - DRAW TO POINT (Hercules GRAFIX)
  1391.     AH = 49h
  1392.     DI = x (0-720)
  1393.     BP = y (0-347)
  1394. Note:    function 48h or 49h specify first point, 44h operation and 43h page to
  1395.       use
  1396. SeeAlso: AH=43h,44h,48h
  1397. ---------------------------------------------
  1398. INT 10 - VIDEO - BLOCK FILL (Hercules GRAFIX)
  1399.     AH = 4Ah
  1400.     DI = x coordinate of lower left corner
  1401.     BP = y coordinate of lower left corner
  1402.     BX = height in pixels
  1403.     CX = width in pixels
  1404. Note:    draws a solid rectangle
  1405. SeeAlso: AH=4Eh
  1406. ---------------------------------------------
  1407. INT 10 - VIDEO - DISPLAY CHARACTER (Hercules GRAFIX)
  1408.     AH = 4Bh
  1409.     AL = character to display
  1410.     DI = x (0-720)
  1411.     BP = y (0-347)
  1412. Note:    unlike the other BIOS character functions character position is
  1413.       specified in pixels rather than rows and columns
  1414. ---------------------------------------------
  1415. INT 10 - VIDEO - DRAW ARC (Hercules GRAFIX)
  1416.     AH = 4Ch
  1417.     AL = quadrant (1 = upper right, 2 = upper left, etc)
  1418.     DI = x coordinate of center
  1419.     BP = y coordinate of center
  1420.     BX = radius
  1421. SeeAlso: AH=4Dh
  1422. ---------------------------------------------
  1423. INT 10 - VIDEO - DRAW CIRCLE (Hercules GRAFIX)
  1424.     AH = 4Dh
  1425.     DI = x of center
  1426.     BP = y of center
  1427.     BX = radius
  1428. SeeAlso: AH=4Ch
  1429. ---------------------------------------------
  1430. INT 10 - VIDEO - FILL AREA (Hercules GRAFIX)
  1431.     AH = 4Eh
  1432.     DI = x coordinate of an interior point
  1433.     BP = y coordinate of an interior point
  1434. Notes:    fills convex polygonal areas
  1435.     the first fill makes the figure solid, the second erases it
  1436. SeeAlso: AH=4Ah
  1437. ---------------------------------------------
  1438. INT 10 - VESA SuperVGA BIOS - GET SuperVGA INFORMATION
  1439.     AX = 4F00h
  1440.     ES:DI -> 256-byte buffer for SuperVGA information (see below)
  1441. Return: AL = 4Fh function supported
  1442.     AH = status
  1443.         00h successful
  1444.         01h failed
  1445.  
  1446. Format of SuperVGA information:
  1447. Offset    Size    Description
  1448.  00h  4 BYTEs    signature ('VESA')
  1449.  04h    WORD    VESA version number
  1450.  06h    DWORD    pointer to OEM name
  1451.  0Ah  4 BYTEs    capabilities
  1452.  0Eh    DWORD    pointer to list of supported VESA and OEM video modes
  1453.  12h 238 BYTEs    reserved
  1454. ---------------------------------------------
  1455. INT 10 - VESA SuperVGA BIOS - GET SuperVGA MODE INFORMATION
  1456.     AX = 4F01h
  1457.     CX = SuperVGA video mode
  1458.     ES:DI -> 256-byte buffer mode information (see below)
  1459. Return: AL = 4Fh function supported
  1460.     AH = status
  1461.         00h successful
  1462.         01h failed
  1463.  
  1464. Format of mode information:
  1465. Offset    Size    Description
  1466.  00h    WORD    mode attributes
  1467.         bit 0: mode supported
  1468.         bit 1: optional information available
  1469.         bit 2: BIOS output supported
  1470.         bit 3: set if color, clear if monochrome
  1471.         bit 4: set if graphics mode, clear if text mode
  1472.  02h    BYTE    window A attributes
  1473.         bit 0: exists
  1474.         bit ???: readable
  1475.         bit ???: writable
  1476.  03h    BYTE    window B attributes (as for window A)
  1477.  04h    WORD    window granularity
  1478.  06h    WORD    window size
  1479.  08h    WORD    start segment of window A
  1480.  0Ah    WORD    start segment of window B
  1481.  0Ch    DWORD    -> FAR window positioning function (equivalent to AX=4F05h)
  1482.  10h    WORD    bytes per scan line
  1483. ---remainder is optional for VESA modes, needed for OEM modes---
  1484.  12h    WORD    width in pixels
  1485.  14h    WORD    height in pixels
  1486.  16h    BYTE    width of character cell in pixels
  1487.  17h    BYTE    height if character cell in pixels
  1488.  18h    BYTE    number of memory planes
  1489.  19h    BYTE    number of bits per pixel
  1490.  1Ah    BYTE    number of banks
  1491.  1Bh    BYTE    memory model type
  1492.  1Ch    BYTE    size of bank in K
  1493. ---------------------------------------------
  1494. INT 10 - VESA SuperVGA BIOS - SET SuperVGA VIDEO MODE
  1495.     AX = 4F02h
  1496.     BX = mode
  1497.         bit 15 set means don't clear video memory
  1498. Return: AL = 4Fh function supported
  1499.     AH = status
  1500.         00h successful
  1501.         01h failed
  1502. SeeAlso: AX=4F03h
  1503.  
  1504. Values for VESA video mode
  1505.  100h    640x400x256
  1506.  101h    640x480x256
  1507.  102h    800x600x16
  1508.  103h    800x600x256
  1509.  104h    1024x768x16
  1510.  105h    1024x768x256
  1511.  106h    1280x1024x16
  1512.  107h    1280x1024x256
  1513. ---------------------------------------------
  1514. INT 10 - VESA SuperVGA BIOS - GET CURRENT VIDEO MODE
  1515.     AX = 4F03h
  1516. Return: AL = 4Fh function supported
  1517.     AH = status
  1518.         00h successful
  1519.         01h failed
  1520.     BX = video mode
  1521. SeeAlso: AX=4F02h
  1522. ---------------------------------------------
  1523. INT 10 - VESA SuperVGA BIOS - SAVE/RESTORE SuperVGA VIDEO STATE
  1524.     AX = 4F04h
  1525.     DL = subfunction
  1526.         00h get state buffer size
  1527.         Return: BX = number of 64-byte blocks needed
  1528.         01h save video states
  1529.         ES:BX -> buffer
  1530.         02h restore video states
  1531.         ES:BX -> buffer
  1532.     CX = flags for states to save/restore
  1533.         bit 0: video hardware state
  1534.         bit 1: video BIOS data state
  1535.         bit 2: video DAC state
  1536.         bit 3: SuperVGA state
  1537. Return: AL = 4Fh function supported
  1538.     AH = status
  1539.         00h successful
  1540.         01h failed
  1541. ---------------------------------------------
  1542. INT 10 - VESA SuperVGA BIOS - CPU VIDEO MEMORY CONTROL
  1543.     AX = 4F05h
  1544.     BH = subfunction
  1545.         00h select video memory window
  1546.         DX = window address in video memory (in granularity units)
  1547.         01h get video memory window
  1548.         Return: DX = window address in video memory (in gran. units)
  1549.     BL = window number
  1550.         00h window A
  1551.         01h window B
  1552. Return: AL = 4Fh function supported
  1553.     AH = status
  1554.         00h successful
  1555.         01h failed
  1556. ---------------------------------------------
  1557. INT 10 - SCROLOCK.COM - INSTALLATION CHECK
  1558.     AH = 50h
  1559. Return: BX = 1954h if installed
  1560.         AL = 00 if inactive, nonzero if active
  1561. Note:    SCROLOCK is a utility supplied with System Enhancement Associates' ARC
  1562. SeeAlso: AH=51h
  1563. ---------------------------------------------
  1564. INT 10 - SCROLOCK.COM - ENABLE/DISABLE
  1565.     AH = 51h
  1566.     AL = state
  1567.         00h disable
  1568.         nonzero enable
  1569. Note:    SCROLOCK is a utility supplied with System Enhancement Associates' ARC
  1570. SeeAlso: AH=50h
  1571. ---------------------------------------------
  1572. INT 10 - VIDEO - ATI EGA/VGA Wonder Super Switch - INSTALLATION CHECK
  1573.     AX = 5555h
  1574. Return: AX = AAAAh    if installed
  1575.     BX:CX -> ??? routine in SMS.COM resident portion
  1576.           -> data area in VCONFIG
  1577. Note:    Super Switch (SMS.COM) is a video mode switch program supplied with
  1578.       ATI EGA Wonder. It also maps video mode 08h to 27h or 23h
  1579. SeeAlso: INT 10/AH=00h
  1580.  
  1581. Format of data area:
  1582. Offset    Size    Description
  1583.  00h    DWORD    original INT 09 vector
  1584.  04h    DWORD    original INT 10 vector
  1585.  08h    DWORD    original INT 1C vector
  1586.  0Ch    WORD    screen saver state, 0=off, 1=on
  1587.  0Eh    WORD    blanking interval in clock ticks
  1588. ---------------------------------------------
  1589. INT 10 - Direct Graphics Interface Standard (DGIS) - INQUIRE AVAILABLE DEVICES
  1590.     AX = 6A00h
  1591.     BX = 0000h
  1592.     CX = 0000h
  1593.     DX = buffer length (may be 0)
  1594.     ES:DI -> buffer
  1595. Return: BX = number of bytes stored in buffer
  1596.     CX = bytes required for all descriptions (0 if no DGIS)
  1597. Note:    buffer contains descriptions and addresses of DGIS-compatible
  1598.       display(s) and printer(s)
  1599. ---------------------------------------------
  1600. INT 10 - DGIS - REDIRECT CHARACTER OUTPUT
  1601.     AX = 6A01h
  1602.     CX = 0000h
  1603.     ES:DI = address of device to send INT 10 output to
  1604. Return: CX = 0000h  output could not be redirected
  1605.          else INT 10h output now routed to requested display
  1606. SeeAlso: AX=6A02h
  1607. ---------------------------------------------
  1608. INT 10 - DGIS - INQUIRE INT 10 OUTPUT DEVICE
  1609.     AX = 6A02h
  1610.     ES:DI = 0000h:0000h
  1611. Return: ES:DI = 0000h:0000h  if current display is non-DGIS
  1612.         else address of the current DGIS INT 10 display
  1613. SeeAlso: AX=6A01h
  1614. ---------------------------------------------
  1615. INT 10 - VIDEO - INSTALLATION CHECK (Video7 VGA,VEGA VGA)
  1616.     AX = 6F00h
  1617. Return: BX = 5637h ('V7') indicates Video7 VGA/VEGA VGA extensions are present
  1618. ---------------------------------------------
  1619. INT 10 - VIDEO - GETINFO (Video7 VGA,VEGA VGA)
  1620.     AX = 6F01h
  1621. Return: AL = monitor type code (VEGA VGA only)
  1622.     AH = status register information
  1623.          bit  0 = display enable
  1624.             0 = display enabled
  1625.             1 = vertical or horizontal retrace in progress
  1626.          bit  1 = light pen flip flop set
  1627.          bit  2 = light pen switch activated
  1628.          bit  3 = vertical sync
  1629.          bit  4 = monitor resolution
  1630.             0 = high resolution (>200 lines)
  1631.             1 = low resolution (<=200 lines)
  1632.          bit  5 = display type
  1633.             0 = color
  1634.             1 = monochrome
  1635.          bits6,7= diagnostic bits
  1636. Note:    bits 0-3 are the same as the EGA/VGA status register bits 0-3
  1637. ---------------------------------------------
  1638. INT 10 - VIDEO - GET MODE AND SCREEN RESOLUTION (Video7 VGA, VEGA VGA)
  1639.     AX = 6F04h
  1640. Return: AL = current video mode (see AX=6F05h)
  1641.     BX = horizontal columns (text) or pixels (graphics)
  1642.     CX = vertical columns (text) or pixels (graphics)
  1643. SeeAlso: AX=6F05h
  1644. ---------------------------------------------
  1645. INT 10 - VIDEO - SET VIDEO MODE (Video7 VGA, VEGA EXTENDED EGA/VGA)
  1646.     AX = 6F05h
  1647.     BL = mode (graphics mode if graphics resolution listed)
  1648.          text  pixel graphic color disp scrn  system
  1649.          resol    box  resoltn       page addr
  1650.        00h-13h = standard IBM modes
  1651.        40h = 80x43    8x8                 Video7/VEGA VGA
  1652.        41h = 132x25 8x14                 Video7/VEGA VGA
  1653.        42h = 132x43 8x8                 Video7/VEGA VGA
  1654.        43h = 80x60    8x8                 Video7/VEGA VGA
  1655.        44h = 100x60 8x8                 Video7/VEGA VGA
  1656.        45h = 132x28 8x8                 Video7/VEGA VGA
  1657.        60h =         752x410  16         Video7 VGA, VEGA VGA
  1658.        61h =         720x540  16         Video7 VGA, VEGA VGA
  1659.            =         720x540  16         Northgate
  1660.        62h =         800x600  16         Video7 VGA, VEGA Ext EGA
  1661.        63h =        1024x768   2         Video7 VGA
  1662.        64h =        1024x768   4         Video7 VGA
  1663.        65h =        1024x768  16         Video7 VGA, VEGA Ext EGA
  1664.        66h =         640x400 256         Video7 VGA, VEGA Ext VGA
  1665.            =         640x400 256         Northgate
  1666.        67h =         640x480 256         Video7 VGA, VEGA Ext VGA
  1667.        68h =         720x540 256         Video7 VGA, VEGA Ext VGA
  1668.        69h =         800x600 256         Video7 VGA, VEGA Ext VGA
  1669.        70h =         752x410  16gray         Video7 VGA, VEGA VGA
  1670.        71h =         720x540  16gray         Video7 VGA, VEGA VGA
  1671.        72h =         800x600  16gray         Video7 VGA
  1672.        73h =        1024x768   2gray         Video7 VGA
  1673.        74h =        1024x768   4gray         Video7 VGA
  1674.        75h =        1024x768  16gray         Video7 VGA
  1675.        76h =         640x400 256gray         Video7 VGA
  1676.        77h =         640x480 256gray         Video7 VGA
  1677.        78h =         720x540 256gray         Video7 VGA
  1678.        79h =         800x600 256gray         (future)
  1679. SeeAlso: AH=00h,AX=0070h,AX=007Eh,AX=6F04h
  1680. ---------------------------------------------
  1681. INT 10 - VIDEO - SELECT AUTOSWITCH MODE (V7VGA,VEGA VGA)
  1682.     AX = 6F06h
  1683.     BL = Autoswitch mode select
  1684.          00h select EGA/VGA-only modes
  1685.          01h select Autoswitched VGA/EGA/CGA/MGA modes
  1686.          02h select 'bootup' CGA/MGA modes
  1687.     BH = enable/disable (00h enable, 01h = disable selection)
  1688. ---------------------------------------------
  1689. INT 10 - VIDEO - GET VIDEO MEMORY CONFIGURATION (V7VGA,VEGA VGA)
  1690.     AX = 6F07h
  1691. Return: AL = 6Fh
  1692.     AH = bits 0-6 = number of 256K blocks of video memory
  1693.          bit 7    = DRAM/VRAM (0: DRAM, 1: VRAM)
  1694.     BH = chip revision (SR8F) (S/C Chip in VEGA VGA)
  1695.     BL = chip revision (SR8E) (G/A Chip in VEGA VGA)
  1696.     CX = 0000h
  1697. SeeAlso: AH=12h/BL=10h
  1698. ---------------------------------------------
  1699. INT 10 - VIDEO - GET VIDEO RAM ADDRESS (TANDY 1000)
  1700.     AH = 70h
  1701. Return: AX  = segment address of the following
  1702.     [BX] = offset address of green plane
  1703.     [CX] = segment address of green plane
  1704.     [DX] = segment address of red/blue plane
  1705.            (red offset = 0, blue offset = 4000)
  1706. SeeAlso: AH=71h
  1707. ---------------------------------------------
  1708. INT 10 - VIDEO - GET INCRAM ADDRESSES (TANDY 1000)
  1709.     AH = 71h
  1710. Return: AX  = segment address of the following
  1711.     [BX] = segment address of INCRAM
  1712.     [CX] = offset address of INCRAM
  1713. SeeAlso: AH=70h
  1714. ---------------------------------------------
  1715. INT 10 - VIDEO - SCROLL SCREEN RIGHT (TANDY 1000)
  1716.     AH = 72h
  1717.     AL = number of columns blanked at left of window
  1718.          00h = blank entire window
  1719.     BH = attributes to be used on blank columns
  1720.     CH,CL = row, column of upper left corner of window
  1721.     DH,DL = row, column of lower right corner
  1722. SeeAlso: AH=06h,07h,73h
  1723. --------------------------------------------
  1724. INT 10 - VIDEO - SCROLL SCREEN LEFT (TANDY 1000)
  1725.     AH = 73h
  1726.     AL = number of columns blanked at right of window
  1727.          00h = blank entire window
  1728.     BH = attributes to be used on blank columns
  1729.     CH,CL = row, column of upper left corner of window
  1730.     DH,DL = row, column of lower right corner
  1731. SeeAlso: AH=06h,07h,72h
  1732. ---------------------------------------------
  1733. INT 10 - VIDEO (DESQview 2.0x only) - internal - SET ??? HANDLER
  1734.     AH = 80h
  1735.     DX = 4456h ('DV')
  1736.     ES:DI -> FAR subroutine to be called on ???
  1737. Return: DS = segment of DESQview data structure for video buffer
  1738. Note:    this function is probably meant for internal use only, due to the magic
  1739.       value required in DX
  1740.     the subroutine seems to be called when the DESQview menu is accessed;
  1741.       on entry, AL = 3 or 4
  1742. ---------------------------------------------
  1743. INT 10 - VIDEO (DESQview 2.0x only) - internal - GET ???
  1744.     AH = 81h
  1745.     DX = 4456h ('DV')
  1746. Return: ES = segment of DESQview data structure for video buffer
  1747.         BYTE ES:[0] = current window number in DV 2.0x
  1748. Note:    this function is probably meant for internal use only, due to the magic
  1749.       value required in DX
  1750. ---------------------------------------------
  1751. INT 10 - VIDEO (DESQview 2.0x only) - internal - GET CURRENT WINDOW INFO
  1752.     AH = 82h
  1753.     DX = 4456h ('DV')
  1754. Return: DS = segment in DESQview for data structure
  1755.          in DV 2.00,
  1756.           BYTE DS:[0] = window number
  1757.           WORD DS:[1] = segment of other data structure
  1758.           WORD DS:[3] = segment of window's object handle
  1759.     ES = segment of DESQview data structure for video buffer
  1760.     AL = current window number
  1761.     AH = ???
  1762.     BL = direct screen writes
  1763.         00h program does not do direct writes
  1764.         01h program does direct writes, so shadow buffer not usable
  1765.     BH = ???
  1766.     CL = current video mode
  1767.     CH = ???
  1768. Note:    this function is probably meant for internal use only, due to the magic
  1769.       value required in DX
  1770. ---------------------------------------------
  1771. INT 10 - VIDEO - Compaq Portable Extensions - SELECT EXTERNAL MONITOR
  1772.     AX = BF00h
  1773. Note:    all registers preserved and the internal monitor is blanked
  1774.     the external monitor becomes the active monitor
  1775. SeeAlso: AX=BF01h
  1776. ---------------------------------------------
  1777. INT 10 - VIDEO - Compaq Portable Extensions - SELECT INTERNAL MONITOR
  1778.     AX = BF01h
  1779. Note:    all registers preserved and the external monitor is blanked
  1780.     the internal monitor becomes the active monitor
  1781. SeeAlso: AX=BF00h
  1782. ---------------------------------------------
  1783. INT 10 - VIDEO - Compaq Portable Extensions - SET MASTER MODE OF CURRENT CTRLR
  1784.     AX = BF02h
  1785.     BH = master mode
  1786.         04h CGA
  1787.         05h EGA
  1788.         07h MDA
  1789. SeeAlso: AX=BF03h
  1790. ---------------------------------------------
  1791. INT 10 - VIDEO - Compaq Portable Extensions - GET ENVIRONMENT
  1792.     AX = BF03h
  1793.     BX = 0000h
  1794. Return: BH = active monitor
  1795.         00h = external
  1796.         01h = internal
  1797.     BL = master mode
  1798.         00h = switchable VDU not present
  1799.         04h = CGA
  1800.         05h = EGA
  1801.         07h = MDA
  1802.     CH = 00h (reserved)
  1803.     CL = switchable VDU mode supported
  1804.         bit  0   = CGA supported
  1805.         bits 1,2 = reserved (1)
  1806.         bit  3   = MDA supported
  1807.         bits 4-7 = reserved (1)
  1808.     DH = internal monitor type
  1809.         00h = none
  1810.         01h = Dual-mode monitor
  1811.         02h = 5153 RGB monitor
  1812.         03h = Compaq Color monitor
  1813.         04h = 640x400 flat panel
  1814.     DL = external monitor type
  1815.         00h = none
  1816.         01h = dual-mode monitor
  1817.         02h = 5153 RGB monitor
  1818.         03h = Compaq Color monitor
  1819.         04h = 640x400 flat panel
  1820. SeeAlso: AH=1Ah, AX=BF00h,BF01h,BF02h
  1821. ---------------------------------------------
  1822. INT 10 - VIDEO - Compaq Portable Extensions - SET MODE SWITCH DELAY
  1823.     AX = BF04h
  1824.     BH = 00h enable delay
  1825.          01h disable delay
  1826. ---------------------------------------------
  1827. INT 10 - VIDEO - MSHERC.COM - INSTALLATION CHECK???
  1828.     AH = EFh
  1829. Return: DL = video adapter type
  1830.         00h original Hercules
  1831.         01h ???  \ one is probably Hercules Plus, the other
  1832.         02h ???  / Hercules InColor
  1833.         FFh non-Hercules 
  1834.     DH = ???
  1835. Note:    MSHERC.COM is a support program for the Microsoft Quick languages which
  1836.       makes their graphics libraries compatible with a Hercules card by
  1837.       adding video modes 08h and 88h, and supporting text in the new
  1838.       graphics modes.  While in mode 08h or 88h, INT 10 supports the
  1839.       Hercules card much like a CGA.
  1840. ---------------------------------------------
  1841. INT 10 - Microsoft Mouse driver EGA support - READ ONE REGISTER
  1842.     AH = F0h
  1843.     BL = register number
  1844.     BH = 00h
  1845.     DX = group index
  1846.         Pointer/data chips
  1847.            00h CRT Controller (25 reg) 3B4h mono modes, 3D4h color modes
  1848.            08h Sequencer (5 registers) 3C4h
  1849.            10h Graphics Controller (9 registers) 3CEh
  1850.            18h Attribute Controller (20 registers) 3C0h
  1851.         Single registers
  1852.            20h Miscellaneous Output register 3C2h
  1853.            28h Feature Control register (3BAh mono modes, 3DAh color modes)
  1854.            30h Graphics 1 Position register 3CCh
  1855.            38h Graphics 2 Position register 3CAh
  1856. Return: BL = data
  1857. Note:    also present in OS/2 compatibility box
  1858. SeeAlso: AH=F1h,F2h
  1859. ---------------------------------------------
  1860. INT 10 - Microsoft Mouse driver EGA support - WRITE ONE REGISTER
  1861.     AH = F1h
  1862.     DX = group index (see AH=F0h)
  1863.         if single register:
  1864.         BL = value to write
  1865.         otherwise
  1866.         BL = register number
  1867.         BH = value to write
  1868. Return: BL = data
  1869. Note:    also present in OS/2 compatibility box
  1870. SeeAlso: AH=F0h,F3h
  1871. ---------------------------------------------
  1872. INT 10 - Microsoft Mouse driver EGA support - READ REGISTER RANGE
  1873.     AH = F2h
  1874.     CH = starting register number
  1875.     CL = Number of registers (>1)
  1876.     DX = group index
  1877.          00h CRTC (3B4h mono modes, 3D4h color modes)
  1878.          08h Sequencer 3C4h
  1879.          10h Graphics Controller 3CEh
  1880.          18h Attribute Controller 3C0h
  1881.     ES:BX -> buffer, CL bytes
  1882. Note:    also present in OS/2 compatibility box
  1883. SeeAlso: AH=F0h,F3h
  1884. ---------------------------------------------
  1885. INT 10 - Microsoft Mouse driver EGA support - WRITE REGISTER RANGE
  1886.     AH = F3h
  1887.     CH = starting register
  1888.     CL = number of registers (>1)
  1889.     DX = group index (see AH=F2h)
  1890.     ES:BX -> buffer, CL bytes
  1891. Note:    also present in OS/2 compatibility box
  1892. SeeAlso: AH=F1h,F2h
  1893. ---------------------------------------------
  1894. INT 10 - Microsoft Mouse driver EGA support - READ REGISTER SET
  1895.     AH = F4h
  1896.     CX = number of registers to read (>1)
  1897.     ES:BX -> table of records (see below)
  1898. Return: register values in table filled in
  1899. Note:    also present in OS/2 compatibility box
  1900. SeeAlso: AH=F0h,F2h,F5h
  1901.  
  1902. Format of entries in table of register records:
  1903. Offset    Size    Description
  1904.  00h    WORD    group index
  1905.         Pointer/data chips
  1906.            00h CRTC (3B4h mono modes, 3D4h color modes)
  1907.            08h Sequencer 3C4h
  1908.            10h Graphics Controller 3CEh
  1909.            18h Attribute Controller 3C0h
  1910.         Single registers
  1911.            20h Miscellaneous Output register 3C2h
  1912.            28h Feature Control register (3BAh mono modes, 3DAh color)
  1913.            30h Graphics 1 Position register 3CCh
  1914.            38h Graphics 2 Position register 3CAh
  1915.  02h    BYTE    register number (0 for single registers)
  1916.  03h    BYTE    register value
  1917. ---------------------------------------------
  1918. INT 10 - Microsoft Mouse driver EGA support - WRITE REGISTER SET
  1919.     AH = F5h
  1920.     CX = number of registers to write (>1)
  1921.     ES:BX -> table of records (see AH=F4h)
  1922. Note:    also present in OS/2 compatibility box
  1923. SeeAlso: AH=F1h,F3h,F4h
  1924. --------------------------------------------
  1925. INT 10 - Microsoft Mouse driver EGA support - REVERT TO DEFAULT REGISTERS
  1926.     AH = F6h
  1927. Note:    also present in OS/2 compatibility box
  1928. SeeAlso: AH=F7h
  1929. --------------------------------------------
  1930. INT 10 - Microsoft Mouse driver EGA support - DEFINE DEFAULT REGISTER TABLE
  1931.     AH = F7h
  1932.     DX = port number
  1933.        Pointer/data chips
  1934.           00h CRTC (3B4h mono modes, 3D4h color modes)
  1935.           08h Sequencer 3C4h
  1936.           10h Graphics Controller 3CEh
  1937.           18h Attribute Controller 3C0h
  1938.        Single registers
  1939.           20h Miscellaneous Output register 3C2h
  1940.           28h Feature Control register (3BAh mono modes, 3DAh color modes)
  1941.           30h Graphics 1 Position register 3CCh
  1942.           38h Graphics 2 Position register 3CAh
  1943.     ES:BX -> table of one-byte entries, one byte to be written to each
  1944.          register
  1945. Note:    also present in OS/2 compatibility box
  1946. SeeAlso: AH=F6h
  1947. --------------------------------------------
  1948. INT 10 - Microsoft Mouse driver EGA support - INTERROGATE DRIVER
  1949.     AH = FAh
  1950.     BX = 0000h
  1951. Return: BX = 0000h if mouse driver not present
  1952.     ES:BX -> EGA Register Interface version number, if present:
  1953.         byte 0 = major release number
  1954.         byte 1 = minor release number
  1955. Note:    also present in OS/2 compatibility box
  1956. --------------------------------------------
  1957. INT 10 - FASTBUFF.COM - INSTALLATION CHECK
  1958.     AH = FAh
  1959. Return: AX = 00FAh if installed
  1960.         ES = segment of resident code
  1961. Note:    FASTBUFF.COM is a keyboard speedup/screen blanking utility by David
  1962.       Steiner
  1963. --------------------------------------------
  1964. INT 10 - VIDEO (TopView) - GET VIDEO BUFFER
  1965.     AH = FEh
  1966.     ES:DI = segment:offset of assumed video buffer
  1967. Return: ES:DI = segment:offset of actual video buffer
  1968. Notes:    if no multitasker is installed, ES:DI is returned unchanged
  1969.     TopView requires a call to AH=FFh to notify if that the screen has
  1970.       changed; DESQview will check for changes itself until the first call
  1971.       to AH=FFh
  1972. SeeAlso: INT 15/AX=1024h, INT 21/AH=2Bh"DESQview"
  1973. ---------------------------------------------
  1974. INT 10 - VIDEO (TopView) - UPDATE REAL SCREEN FROM VIDEO BUFFER
  1975.     AH = FFh
  1976.     CX = number of sequential characters that have been modified
  1977.     DI = offset of first character that has been modified
  1978.     ES = segment of video buffer
  1979. Note:    avoid CX=0000h
  1980. ---------------------------------------------
  1981. INT 11 - 80486 internal hardware - ALIGNMENT CHECK
  1982.    Bit AC in the EFLAGS register enables this interrupt on a memory reference
  1983.      on a mis-aligned address when in privilege mode 3.
  1984. ---------------------------------------------
  1985. INT 11 - EQUIPMENT DETERMINATION
  1986. Return: AX = equipment flag bits
  1987.         0      diskette installed
  1988.         1      8087 present
  1989.         2      mouse installed (PS2 only)
  1990.         2,3   number of 16K banks of RAM on motherboard (PC only)
  1991.           number of 64K banks of RAM on motherboard (XT only)
  1992.           always = 11 on AT and above
  1993.         4,5   initial video mode
  1994.           01 = 40x25 color
  1995.           10 = 80x25 color
  1996.           11 = 80X25 IBM monochrome
  1997.         6,7   number of diskette drives (only if bit 0 = 1)
  1998.           00 = 1, 01 = 2, 10 = 3, 11 = 4
  1999.         8      0 = DMA present
  2000.           1 = no DMA on system (PCjr, some Tandy 1000s, 1400LT)
  2001.         9-11  number of RS232 cards
  2002.         12      game I/O attached
  2003.         13      serial printer installed (PCjr)
  2004.           internal modem installed (PC/Convertible)
  2005.         14,15 number of printers
  2006. ---Compaq and many other 386/486 machines--
  2007.     EAX bit 23: page tables set so that Weitek coprocessor addressable in
  2008.             real mode
  2009.         bit 24: Weitek math coprocessor present
  2010. SeeAlso: INT 12
  2011. ---------------------------------------------
  2012. INT 12 - MEMORY SIZE
  2013. Return: AX = number of contiguous 1K blocks of memory
  2014. SeeAlso: INT 11
  2015. ---------------------------------------------
  2016. INT 13 - DISK - RESET DISK SYSTEM
  2017.     AH = 00h
  2018.     DL = drive (if bit 7 is set both hard disks and floppy disks reset)
  2019. Note:    forces controller to recalibrate drive heads (seek to track 0)
  2020. SeeAlso: AH=0Dh, INT 21/AH=0Dh
  2021. ---------------------------------------------
  2022. INT 13 - DISK - STATUS OF DISK SYSTEM
  2023.     AH = 01h
  2024. Return: AL = status of last disk operation
  2025.         00h = successful completion
  2026.         01h = bad command
  2027.         02h = address mark not found
  2028.         03h = write attempted on write-protected disk
  2029.         04h = sector not found
  2030.         05h = reset failed (hard disk)
  2031.         06h = diskette changed
  2032.         07h = parameter act. failed (hard disk)
  2033.         08h = DMA overrun (floppy disk)
  2034.         09h = DMA across 64K boundary
  2035.         0Ah = bad sector detected (hard disk)
  2036.         0Bh = bad track detected (hard disk)
  2037.         0Ch = unsupported track
  2038.         0Dh = invalid number of sectors on format (hard disk)
  2039.         0Eh = control data address mark detected (hard disk)
  2040.         0Fh = DMA arbitration error (hard disk)
  2041.         10h = bad CRC/ECC
  2042.         11h = data ECC corrected (hard disk)
  2043.         20h = controller failure
  2044.         40h = seek failed
  2045.         80h = time out
  2046.         AAh = drive not ready (hard disk)
  2047.         BBh = undefined error (hard disk)
  2048.         CCh = write fault (hard disk)
  2049.         E0h = status register error (hard disk)
  2050.         FFh = sense operation failed (hard disk)
  2051. ---------------------------------------------
  2052. INT 13 - DISK - READ SECTORS INTO MEMORY
  2053.     AH = 02h
  2054.     AL = number of sectors to read
  2055.     CH = track (for hard disk, bits 8,9 in high bits of CL)
  2056.     CL = sector (01h to number of sectors/track for drive)
  2057.     DH = head
  2058.     DL = drive
  2059.     ES:BX -> buffer to fill
  2060. Return: CF set on error
  2061.     AH = status (see AH=01h)
  2062.     AL = number of sectors read
  2063. Notes:    results undefined if attempting to read zero sectors
  2064.     AWARD AT BIOS extended to handle more than 1024 cylinders by placing
  2065.       bits 10 and 11 of the cylinder number into bits 6 and 7 of DH
  2066.     apparently, the AMI BIOS also follows this convention
  2067. SeeAlso: AH=03h,0Ah
  2068. ---------------------------------------------
  2069. INT 13 - DISK - WRITE SECTORS FROM MEMORY
  2070.     AH = 03h
  2071.     AL = number of sectors to write
  2072.     CH = track (if hard disk, bits 8,9 in high bits of CL)
  2073.     CL = sector (if hard disk, high two bits are high bits of track #)
  2074.     DH = head
  2075.     DL = drive
  2076.     ES:BX -> buffer
  2077. Return: CF set on error
  2078.     AH = status (see AH=01h)
  2079.     AL = number of sectors written
  2080. Notes:    results undefined if attempting to write zero sectors
  2081.     AWARD AT BIOS extended to handle more than 1024 cylinders by placing
  2082.       bits 10 and 11 of the cylinder number into bits 6 and 7 of DH
  2083.     apparently, the AMI BIOS also follows this convention
  2084. SeeAlso: AH=02h,0Bh
  2085. ---------------------------------------------
  2086. INT 13 - DISK - VERIFY SECTORS
  2087.     AH = 04h
  2088.     AL = number of sectors to verify
  2089.     CH = track (for hard disk, bits 8,9 in high bits of CL)
  2090.     CL = sector (01h to number of sectors per track for drive)
  2091.     DH = head
  2092.     DL = drive
  2093. Return: CF set on error
  2094.     AH = status (see AH=01h)
  2095.     AL = number of sectors verified
  2096. Notes:    AWARD AT BIOS extended to handle more than 1024 cylinders by placing
  2097.       bits 10 and 11 of the cylinder number into bits 6 and 7 of DH
  2098.     apparently, the AMI BIOS also follows this convention
  2099. ---------------------------------------------
  2100. INT 13 - FLOPPY - FORMAT TRACK
  2101.     AH = 05h
  2102.     AL = number of sectors to create on this track
  2103.     CH = track
  2104.     CL = sector (01h to number of sectors per track for drive)
  2105.     DH = head
  2106.     DL = drive
  2107.     ES:BX -> array of 4-byte address fields
  2108.         BYTE    track
  2109.         BYTE    head
  2110.         BYTE    sector
  2111.         BYTE    bytes/sector  0=128, 1=256, 2=512, 3=1024
  2112. Return: CF set if error occurred
  2113.     AH = status code (see AH=01h)
  2114. ---------------------------------------------
  2115. INT 13 - FIXED DISK - FORMAT TRACK
  2116.     AH = 05h
  2117.     AL = interleave value (XT only)
  2118.     ES:BX = 512-byte format buffer
  2119.         the first 2*(sectors/track) bytes contain F,N for each sector
  2120.            F = 00 for good sector, 80h for bad sector
  2121.            N = sector number
  2122.     CH = cylinder number (bits 8,9 in high bits of CL)
  2123.     CL = sector number (01h to number of sectors per track for drive)
  2124.     DH = head
  2125.     DL = drive
  2126. Return: AH = status code (see AH=01h)
  2127. Notes:    AWARD AT BIOS extended to handle more than 1024 cylinders by placing
  2128.       bits 10 and 11 of the cylinder number into bits 6 and 7 of DH
  2129.     apparently, the AMI BIOS also follows this convention
  2130. SeeAlso: AH=06h,07h,1Ah
  2131. ---------------------------------------------
  2132. INT 13 - FIXED DISK - FORMAT TRACK AND SET BAD SECTOR FLAGS (XT,PORT)
  2133.     AH = 06h
  2134.     AL = interleave value
  2135.     CH = cylinder number (bits 8,9 in high bits of CL)
  2136.     CL = sector number
  2137.     DH = head
  2138.     DL = drive
  2139. Return: AH = status code (see AH=01h)
  2140. Notes:    AWARD AT BIOS extended to handle more than 1024 cylinders by placing
  2141.       bits 10 and 11 of the cylinder number into bits 6 and 7 of DH
  2142.     apparently, the AMI BIOS also follows this convention
  2143. ---------------------------------------------
  2144. INT 13 - FIXED DISK - FORMAT DRIVE STARTING AT GIVEN TRACK (XT,PORT)
  2145.     AH = 07h
  2146.     AL = interleave value (XT only)
  2147.     ES:BX = 512-byte format buffer (see AH=05h)
  2148.     CH = cylinder number (bits 8,9 in high bits of CL)
  2149.     CL = sector number
  2150.     DH = head
  2151.     DL = drive
  2152. Return: AH = status code (see AH=01h)
  2153. Note:    AWARD AT BIOS extended to handle more than 1024 cylinders by placing
  2154.       bits 10 and 11 of the cylinder number into bits 6 and 7 of DH
  2155.     apparently, the AMI BIOS also follows this convention
  2156. SeeAlso: AH=1Ah
  2157. ---------------------------------------------
  2158. INT 13 - DISK - GET CURRENT DRIVE PARAMETERS (XT,AT,XT286,CONV,PS)
  2159.     AH = 08h
  2160.     DL = drive number
  2161. Return: CF set on error
  2162.     AH = status code (see AH=01h)
  2163.     BL = drive type (see AH=17h) (AT/PS2 floppies only)
  2164.     DL = number of consecutive acknowledging drives
  2165.     DH = maximum value for head number
  2166.     CL = maximum value for sector number (bits 0-5)
  2167.     CH = maximum value for cylinder number (highest bits in bits 6,7 of CL)
  2168.     ES:DI -> drive parameter table
  2169. ---------------------------------------------
  2170. INT 13 - FIXED DISK - INITIALIZE TWO FIXED DISK BASE TABLES (XT,AT,XT286,PS)
  2171.     AH = 09h
  2172. Return: CF set on error
  2173.     AH = status code (see AH=01h)
  2174.     INT 41h points to table for drive 0
  2175.     INT 46h points to table for drive 1
  2176. ---------------------------------------------
  2177. INT 13 - FIXED DISK - READ LONG (XT,AT,XT286,PS)
  2178.     AH = 0Ah
  2179.     DL = drive ID
  2180.     DH = head
  2181.     CH = cylinder (bits 8,9 in high bits of CL)
  2182.     CL = sector (01h to number of sectors per track for drive)
  2183.     ES:BX -> buffer to fill
  2184. Return: CF set on error
  2185.     AH = status code (see AH=01h)
  2186.     AL = number of sectors read
  2187. Note:    used for diagnostics only on PS/2 systems
  2188. SeeAlso: AH=02h,0Bh
  2189. ---------------------------------------------
  2190. INT 13 - FIXED DISK - WRITE LONG (XT,AT,XT286,PS)
  2191.     AH = 0Bh
  2192.     DL = drive ID
  2193.     DH = head
  2194.     CH = cylinder (bits 8,9 in high bits of CL)
  2195.     CL = sector (01h to number of sectors per track for drive)
  2196.     ES:BX -> buffer containing data
  2197. Return: CF set on error
  2198.     AH = status code (see AH=01h)
  2199.     AL = number of sectors written
  2200. Note:    used for diagnostics only on PS/2 systems
  2201. SeeAlso: AH=03h,0Ah
  2202. ---------------------------------------------
  2203. INT 13 - FIXED DISK - SEEK TO CYLINDER (XT,AT,XT286,PS)
  2204.     AH = 0Ch
  2205.     DL = drive ID
  2206.     DH = head
  2207.     CH = cylinder (bits 8,9 in high bits of CL)
  2208. Return: CF set on error
  2209.     AH = status code (see AH=01h)
  2210. ---------------------------------------------
  2211. INT 13 - FIXED DISK - ALTERNATE DISK RESET (XT,AT,XT286,PS)
  2212.     AH = 0Dh
  2213.     DL = drive ID
  2214. Return: CF set on error
  2215.     AH = status code (see AH=01h)
  2216. Note:    not for PS/2 ESDI drives
  2217. SeeAlso: AH=00h, INT 21/AH=0Dh
  2218. ---------------------------------------------
  2219. INT 13 - FIXED DISK - READ SECTOR BUFFER (XT,PS)
  2220.     AH = 0Eh
  2221.     ES:BX -> buffer
  2222. Return: CF set on error
  2223.     AH = status code (see AH=01h)
  2224. Notes:    transfers controller's sector buffer.  No data is read from the drive
  2225.     used for diagnostics only on PS/2 systems
  2226. SeeAlso: AH=0Ah
  2227. ---------------------------------------------
  2228. INT 13 - FIXED DISK - WRITE SECTOR BUFFER (XT,PS)
  2229.     AH = 0Fh
  2230.     ES:BX -> buffer
  2231. Return: CF set on error
  2232.     AH = status code (see AH=01h)
  2233. Notes:    should be called before formatting to initialize the controller's
  2234.       sector buffer.
  2235.     used for diagnostics only on PS/2 systems
  2236. SeeAlso: AH=0Bh
  2237. ---------------------------------------------
  2238. INT 13 - FIXED DISK - TEST FOR DRIVE READY (XT,AT,XT286,PS)
  2239.     AH = 10h
  2240.     DL = drive ID
  2241. Return: CF set on error
  2242.     AH = status code (see AH=01h)
  2243. ---------------------------------------------
  2244. INT 13 - FIXED DISK - RECALIBRATE DRIVE (XT,AT,XT286,PS)
  2245.     AH = 11h
  2246.     DL = drive ID
  2247. Return: CF set on error
  2248.     AH = status code (see AH=01h)
  2249. SeeAlso: AH=19h
  2250. ---------------------------------------------
  2251. INT 13 - FIXED DISK - CONTROLER RAM DIAGNOSTIC (XT,PS)
  2252.     AH = 12h
  2253. Return: CF set on error
  2254.     AH = status code (see AH=01h)
  2255. Note:    used for diagnostics only on PS/2 systems
  2256. SeeAlso: AH=13h,14h
  2257. ---------------------------------------------
  2258. INT 13 - FIXED DISK - DRIVE DIAGNOSTIC (XT,PS)
  2259.     AH = 13h
  2260. Return: CF set on error
  2261.     AH = status code (see AH=01h)
  2262. Note:    used for diagnostics only on PS/2 systems
  2263. SeeAlso: AH=12h,14h
  2264. ---------------------------------------------
  2265. INT 13 - FIXED DISK - CONTROLLER DIAGNOSTICS (XT,AT,XT286,PS)
  2266.     AH = 14h
  2267. Return: CF set on error
  2268.     AH = status code (see AH=01h)
  2269. Note:    used for diagnostics only on PS/2 systems
  2270. SeeAlso: AH=12h,13h
  2271. ---------------------------------------------
  2272. INT 13 - DISK - GET TYPE (AT,XT2,XT286,CONV,PS)
  2273.     AH = 15h
  2274.     DL = drive ID
  2275. Return: CF set on error
  2276.     AH = disk type
  2277.         00h = disk not there
  2278.         01h = floppy, no change detection present
  2279.         02h = floppy with change detection
  2280.         03h = fixed disk
  2281.            CX:DX = number of 512-byte sectors
  2282. SeeAlso: AH=17h
  2283. ---------------------------------------------
  2284. INT 13 - FLOPPY DISK - CHANGE OF DISK STATUS (AT,XT2,XT286,CONV,PS)
  2285.     AH = 16h
  2286.     DL = drive to check
  2287. Return: AH = disk change status
  2288.         00h = no disk change
  2289.         06h = disk changed
  2290. ---------------------------------------------
  2291. INT 13 - DISK - SET TYPE (AT,XT2,XT286,CONV,PS)
  2292.     AH = 17h
  2293.     AL = disk type
  2294.         00h = no disk
  2295.         01h = regular disk in regular drive
  2296.         02h = regular disk in high-capacity drive
  2297.         03h = high-capacity disk in high-capacity drive
  2298.         04h = 720K disk in 720K drive
  2299.     DL = drive ID
  2300. Note:    I assume that 05h and 06h are 720K in 1.44M and 1.44M in 1.44M
  2301. SeeAlso: AH=15h
  2302. ---------------------------------------------
  2303. INT 13 - DISK - SET MEDIA TYPE FOR FORMAT (AT model 3x9,XT2,XT286,PS)
  2304.     AH = 18h
  2305.     DL = drive number
  2306.     CH = lower 8 bits of number of tracks
  2307.     CL = sectors per track (bits 0-5)
  2308.          top 2 bits of number of tracks (bits 6,7)
  2309. Return: AH = 00h  requested combination supported
  2310.          01h  function not available
  2311.          0Ch  not supported or drive type unknown
  2312.          80h  there is no disk in the drive
  2313.     ES:DI -> 11-byte parameter table
  2314. SeeAlso: AH=05h,07h,17h
  2315. ---------------------------------------------
  2316. INT 13 - FIXED DISK - PARK HEADS (XT286,PS)
  2317.     AH = 19h
  2318.     DL = drive
  2319. Return: CF set on error
  2320.     AH = status (see AH=01h)
  2321. SeeAlso: AH=11h
  2322. ---------------------------------------------
  2323. INT 13 - ESDI FIXED DISK - FORMAT UNIT (PS)
  2324.     AH = 1Ah
  2325.     AL = defect table count
  2326.     CL = format modifiers
  2327.         bit 4: generate periodic interrupt
  2328.         bit 3: perform surface analysis
  2329.         bit 2: update secondary defect map
  2330.         bit 1: ignore secondary defect map
  2331.         bit 0: ignore primary defect map
  2332.     DL = drive
  2333.     ES:BX -> defect table
  2334. Return: CF set on error
  2335.     AH = status (see AH=01h)
  2336. Note:    if periodic interrupt selected, INT 15h/AH=0Fh is called after each
  2337.       cylinder is formatted
  2338. SeeAlso: AH=07h, INT 15/AH=0Fh
  2339. ---------------------------------------------
  2340. INT 13 - ESDI FIXED DISK - GET MANUFACTURING HEADER
  2341.     AH = 1Bh
  2342.     AL = number of record
  2343.     DL = drive
  2344.     ES:BX -> buffer for manufacturing header (defect list)
  2345. Return: CF set on error
  2346.         AH = status
  2347. Note:    manufacturing header format (Defect Map Record format) can be found
  2348.       in IBM 70MB, 115MB Fixed Disk Drives Technical Reference
  2349. ---------------------------------------------
  2350. INT 13 - ESDI FIXED DISK - GET DEVICE CONFIGURATION
  2351.     AX = 1C0Ah
  2352.     DL = drive
  2353.     ES:BX -> buffer for device configuration (drive physical parameter)
  2354. Return: CF set on error
  2355.         AH = status
  2356. Note:    device configuration format can be found in IBM ESDI Fixed Disk Drive
  2357.       Adapter/A Technical Reference
  2358. ---------------------------------------------
  2359. INT 13 - ESDI FIXED DISK - GET ADAPTER CONFIGURATION
  2360.     AX = 1C0Bh
  2361.     ES:BX -> buffer for adapter configuration
  2362. Return: CF set on error
  2363.         AH = status
  2364. SeeAlso: AX=1C0Ch
  2365. ---------------------------------------------
  2366. INT 13 - ESDI FIXED DISK - GET POS INFORMATION
  2367.     AX = 1C0Ch
  2368.     ES:BX -> POS information
  2369. Return: CF set on error
  2370.         AH = status
  2371. SeeAlso: AX=1C0Bh
  2372. ---------------------------------------------
  2373. INT 13 - ESDI FIXED DISK - TRANSLATE RBA TO ABA
  2374.     AX = 1C0Eh
  2375.     CH = low 8 bits of cylinder number
  2376.     CL = sector number, high two bits of cylinder number in bits 6 and 7
  2377.     DH = head number
  2378.     DL = drive number
  2379.     ES:BX -> ABA number
  2380. Return: CF set on error
  2381.         AH = status
  2382. Note:    ABA (absolute block address) format can be found in IBM ESDI Adapter
  2383.       Technical Reference by using it's Device Configuration Status Block
  2384. ---------------------------------------------
  2385. INT 13 - IBMCACHE.SYS - CACHE STATUS
  2386.     AH = 1Dh
  2387.     AL = subfunction
  2388.         01h get status record
  2389.         DL = drive???
  2390.         Return: ES:BX -> status record
  2391.             CF set on error
  2392.                 AH = error code
  2393.         02h set cache status
  2394.         ES:BX -> status record
  2395.         DL = drive???
  2396.         Return: CF set on error
  2397.  
  2398. Format of status record:
  2399. Offset    Size    Description
  2400.  00h    DWORD    total number of read requests
  2401.  04h    DWORD    total number of hits
  2402.  08h    DWORD    number of physical disk reads
  2403.  0Ch    DWORD    total number of sectors requested by physical disk reads
  2404.  10h  6 bytes    ???
  2405.  16h    DWORD    pointer to start of error list
  2406.  1Ah    DWORD    pointer to end of error list
  2407.  1Eh    WORD    ???
  2408.  20h    BYTE    using extended memory if nonzero
  2409.  21h    BYTE    ???
  2410.  22h  4 BYTEs    ASCII version number
  2411.  26h    WORD    cache size in K
  2412.  28h    WORD    sectors per page
  2413.  
  2414. Format of error list:
  2415. Offset    Size    Description
  2416.  00h    DWORD    relative block address of bad page
  2417.  04h    BYTE    drive
  2418.  05h    BYTE    sector bit-map
  2419.  06h    WORD    next error
  2420. ---------------------------------------------
  2421. INT 13 - DISK - ??? (Western Digital "Super BIOS")
  2422.     AH = 20h
  2423.     ???
  2424. Return: ???
  2425. Note:    seems to return some kind of status
  2426. ---------------------------------------------
  2427. INT 13 - QCACHE - DISMOUNT
  2428.     AX = 20FFh
  2429. Return: ???
  2430. ---------------------------------------------
  2431. INT 13 - QCACHE - FLUSH CACHE
  2432.     AH = 21h
  2433. Return: ???
  2434. SeeAlso: AH=25h,2Eh
  2435. ---------------------------------------------
  2436. INT 13 - QCACHE - ENABLE/DISABLE CACHE
  2437.     AH = 22h
  2438.     AL = 00h disable cache
  2439.          01h enable cache
  2440. ---------------------------------------------
  2441. INT 13 - QCACHE - SET SECTORS
  2442.     AH = 24h
  2443.     BX = number of sectors
  2444. Return: ???
  2445. ---------------------------------------------
  2446. INT 13 - QCACHE - SET FLUSH INTERVAL
  2447.     AH = 25h
  2448.     BC = interval
  2449. Return: ???
  2450. SeeAlso: AH=21h,2Eh
  2451. ---------------------------------------------
  2452. INT 13 - QCACHE - INSTALLATION CHECK
  2453.     AH = 27h
  2454.     BX = 0000h
  2455. Return: BX nonzero if installed
  2456. ---------------------------------------------
  2457. INT 13 - QCACHE - SET BUFFER SIZE
  2458.     AH = 2Ah
  2459.     AL = buffer size
  2460. Return: ???
  2461. ---------------------------------------------
  2462. INT 13 - QCACHE - SET BUFFERED WRITES
  2463.     AH = 2Ch
  2464.     AL = state
  2465.         00h disable
  2466.         01h enable
  2467. Return: ???
  2468. SeeAlso: AH=2Dh
  2469. ---------------------------------------------
  2470. INT 13 - QCACHE - SET BUFFERED READ
  2471.     AH = 2Dh
  2472.     AL = state
  2473.         00h disable
  2474.         01h enable
  2475. Return: ???
  2476. SeeAlso: AH=2Ch
  2477. ---------------------------------------------
  2478. INT 13 - QCACHE - SET FLUSH COUNT
  2479.     AH = 2Eh
  2480.     BX = flush count
  2481. Return: ???
  2482. SeeAlso: AH=21h,25h
  2483. ---------------------------------------------
  2484. INT 13 - QCACHE - GET INFO
  2485.     AH = 30h
  2486.     AL = what to get
  2487.         00h system info
  2488.         01h drive info
  2489.     DS:DX -> buffer for info
  2490. Return: ???
  2491. ---------------------------------------------
  2492. INT 13 - Super PC Kwik/PC-Cache 5.5 - ???
  2493.     AH = 81h
  2494.     SI = 4358h
  2495.     ???
  2496. Return: ???
  2497. Note:    PC Tools PC Cache 5.5 is an OEM version of Super PC Kwik, and thus
  2498.       supports this call
  2499. ---------------------------------------------
  2500. INT 13 - Super PC Kwik/PC-Cache 5.5 - ???
  2501.     AH = 82h
  2502.     SI = 4358h
  2503.     ???
  2504. Return: ???
  2505. Note:    PC Tools PC Cache 5.5 is an OEM version of Super PC Kwik, and thus
  2506.       supports this call
  2507. ---------------------------------------------
  2508. INT 13 - Super PC Kwik/PC-Cache 5.5 - ???
  2509.     AH = 83h
  2510.     SI = 4358h
  2511.     ???
  2512. Return: ???
  2513. Note:    PC Tools PC Cache 5.5 is an OEM version of Super PC Kwik, and thus
  2514.       supports this call
  2515. ---------------------------------------------
  2516. INT 13 - Super PC Kwik/PC-Cache 5.5 - ???
  2517.     AH = 84h
  2518.     SI = 4358h
  2519.     ???
  2520. Return: ???
  2521. Note:    PC Tools PC Cache 5.5 is an OEM version of Super PC Kwik, and thus
  2522.       supports this call
  2523. ---------------------------------------------
  2524. INT 13 - Super PC Kwik/PC-Cache 5.5 - ???
  2525.     AH = 85h
  2526.     SI = 4358h
  2527.     ???
  2528. Return: ???
  2529. Note:    PC Tools PC Cache 5.5 is an OEM version of Super PC Kwik, and thus
  2530.       supports this call
  2531. ---------------------------------------------
  2532. INT 13 - Super PC Kwik - GET RESIDENT CODE SEGMENT
  2533.     AH = A0h
  2534.     SI = 4358h
  2535.     ???
  2536. Return: AX = segment of resident code
  2537.     ???
  2538. Note:    PC Tools PC Cache 5.5 is an OEM version of Super PC Kwik, and thus
  2539.       supports this call
  2540. ---------------------------------------------
  2541. INT 13 - Super PC Kwik - FLUSH CACHE
  2542.     AH = A1h
  2543.     SI = 4358h
  2544.     ???
  2545. Return: ???
  2546. Note:    PC Tools PC Cache 5.5 is an OEM version of Super PC Kwik, and thus
  2547.       supports this call
  2548. ---------------------------------------------
  2549. INT 13 - Super PC Kwik - ???
  2550.     AH = A2h
  2551.     SI = 4358h
  2552.     ???
  2553. Return: ???
  2554. Note:    PC Tools PC Cache 5.5 is an OEM version of Super PC Kwik, and thus
  2555.       supports this call
  2556. ---------------------------------------------
  2557. INT 13 - Super PC Kwik - ???
  2558.     AH = B0h
  2559.     SI = 4358h
  2560.     ???
  2561. Return: ???
  2562. Note:    PC Tools PC Cache 5.5 is an OEM version of Super PC Kwik, and thus
  2563.       supports this call
  2564. ---------------------------------------------
  2565. INT 13 - SWBIOS - SET 1024 CYLINDER FLAG
  2566.     AH = EEh
  2567.     DL = drive number (80h, 81h)
  2568. Return: CF clear
  2569.        AH = 00h
  2570. Notes:    the following INT 13 call will interpret the cylinder number as 1024
  2571.       less than the desired cylinder
  2572.     flag cleared by all INT 13 calls except AH=EEh
  2573.     SWBIOS is a TSR by Ontrack Computer Systems; Disk Manager also supports
  2574.       these calls
  2575. SeeAlso: AH=F9h,FEh
  2576. ---------------------------------------------
  2577. INT 13 - SWBIOS - INSTALLATION CHECK
  2578.     AH = F9h
  2579.     DL = drive number (80h,81h)
  2580. Return: CF clear 
  2581.         DX = configuration word
  2582.         bit 15 set if other SWBIOS extensions available
  2583.     CF set on error
  2584. Note:    SWBIOS is a TSR by Ontrack Computer Systems; Disk Manager also supports
  2585.       these calls
  2586. SeeAlso: AH=EEh
  2587. ---------------------------------------------
  2588. INT 13 - SWBIOS - GET EXTENDED CYLINDER COUNT
  2589.     AH = FEh
  2590.     DL = drive number (80h, 81h)
  2591. Return: CF clear
  2592.     DX = number of cylinders beyond 1024 on drive
  2593. Notes:    standard INT 13/AH=08h will return a cylinder count truncated to 1024
  2594.     BIOS without this extension would return count modulo 1024
  2595.     SWBIOS is a TSR by Ontrack Computer Systems; Disk Manager also supports
  2596.       these calls
  2597. SeeAlso: AH=EEh
  2598. ---------------------------------------------
  2599. INT 14 - SERIAL I/O - INITIALIZE USART
  2600.     AH = 00h
  2601.     AL = initializing parameters
  2602.         7 - 6 - 5       4 - 3     2      1 - 0
  2603.         -BAUD RATE-    PARITY   STOP   WORD
  2604.                     BITS  LENGTH
  2605.         000  110 bd    00 none  0: 1   00: 5
  2606.         001  150 bd    01 odd   1: 2   01: 6
  2607.         010  300 bd    11 even       10: 7
  2608.         011  600 bd            11: 8
  2609.         100 1200 bd
  2610.         101 2400 bd
  2611.         110 4800 bd
  2612.         111 9600 bd (4800 on PCjr)
  2613.     DX = port number (0-3)
  2614. Return: AH = RS-232 status code bits
  2615.         0: data ready
  2616.         1: overrun error
  2617.         2: parity error
  2618.         3: framing error
  2619.         4: break detected
  2620.         5: transmission buffer register empty
  2621.         6: transmission shift register empty
  2622.         7: time out--if set, other bits invalid
  2623.     AL = modem status bits
  2624.         0: delta Clear-To-Send
  2625.         1: delta Data-Set-Ready
  2626.         2: trailing edge of ring detected
  2627.         3: change in receive line signal detected
  2628.         4: Clear-To-Send
  2629.         5: Data-Set-Ready
  2630.         6: ring detected
  2631.         7: receive line signal detected
  2632. SeeAlso: AH=05h
  2633. ---------------------------------------------
  2634. INT 14 - FOSSIL (Fido/Opus/Seadog Standard Interface Level) - INITIALIZE
  2635.     AH = 00h
  2636.     AL = initializing parameters
  2637.         7 - 6 - 5       4 - 3     2      1 - 0
  2638.         -BAUD RATE-    PARITY   STOP   WORD
  2639.                     BITS  LENGTH
  2640.         000 19200 bd   00 none  0: 1  00: 5
  2641.         001 38400 bd   01 odd   1: 2  01: 6
  2642.         010   300 bd   11 even      10: 7
  2643.         011   600 bd          11: 8
  2644.         100  1200 bd
  2645.         101  2400 bd
  2646.         110  4800 bd
  2647.         111  9600 bd (4800 on PCjr)
  2648.     DX = port number (0-3 or FFh if only performing non-I/O setup)
  2649. Return: AH = RS-232 status code bits
  2650.         0: RDA - input data is available in buffer
  2651.         1: OVRN - data has been lost
  2652.         5: THRE - room is available in output buffer
  2653.         6: TSRE - output buffer empty
  2654.     AL = modem status bits
  2655.         3: always 1
  2656.         7: DCD - carrier detect
  2657. SeeAlso: AH=05h
  2658. ---------------------------------------------
  2659. INT 14 - SERIAL I/O - TRANSMIT CHARACTER
  2660.     AH = 01h
  2661.     AL = character
  2662.     DX = port number (0-3)
  2663. Return: AX = port status (see AH=00h)
  2664. SeeAlso: AH=02h,0Bh
  2665. ---------------------------------------------
  2666. INT 14 - SERIAL I/O - RECEIVE CHARACTER
  2667.     AH = 02h
  2668.     DX = port number (0-3)
  2669. Return: AL = character received
  2670.     AH = RS-232 status code (see AH=00h)
  2671. Note:    will timeout if DSR is not asserted, even if function 03h returns
  2672.       data ready
  2673. SeeAlso: AH=01h
  2674. ---------------------------------------------
  2675. INT 14 - FOSSIL - RECEIVE CHARACTER WITH WAIT
  2676.     AH = 02h
  2677.     DX = port number (0-3)
  2678. Return: AL = character received
  2679.     AH = 00h
  2680. ---------------------------------------------
  2681. INT 14 - SERIAL I/O - GET USART STATUS
  2682.     AH = 03h
  2683.     DX = port number (0-3)
  2684. Return: AX = port status code (see AH=00h)
  2685. ---------------------------------------------
  2686. INT 14 - SERIAL I/O - EXTENDED INITIALIZE (CONVERTIBLE,PS)
  2687.     AH = 04h
  2688.     AL = break status
  2689.         00h if break
  2690.         01h if no break
  2691.     BH = parity
  2692.         00h no parity
  2693.         01h odd parity
  2694.         02h even parity
  2695.         03h stick parity odd
  2696.         04h stick parity even
  2697.     BL = number of stop bits
  2698.         00h one stop bit
  2699.         01h two stop bits (1.5 if 5 bit word length)
  2700.     CH = word length
  2701.         00h 5 bits
  2702.         01h 6 bits
  2703.         02h 7 bits
  2704.         03h 8 bits
  2705.     CL = bps rate
  2706.         00h 110
  2707.         01h 150
  2708.         02h 300
  2709.         03h 600
  2710.         04h 1200
  2711.         05h 2400
  2712.         06h 4800
  2713.         07h 9600
  2714.         08h 19200
  2715.     DX = port number
  2716. Return: AX = port status code (see AH=00h)
  2717. ---------------------------------------------
  2718. INT 14 - FOSSIL - INITIALIZE DRIVER
  2719.     AH = 04h
  2720.     DX = port number
  2721.     optionally BX=4F50h
  2722.            ES:CX -> byte to be set upon ^C
  2723. Return: AX = 1954h (if successful)
  2724.     BL = maximum function number supported (excluding 7Eh and above)
  2725.     BH = revision of FOSSIL supported
  2726.     DTR is raised
  2727. Note:    the word at offset 6 in the interrupt handler contains 1954h, and the
  2728.       following byte contains the maximum function number supported
  2729. ---------------------------------------------
  2730. INT 14 - SERIAL I/O - EXTENDED COMMUNICATION PORT CONTROL (CONVERTIBLE,PS)
  2731.     AH = 05h
  2732.     AL = 00h read modem control register
  2733.           Return: BL = modem control register (see below)
  2734.               AH = status
  2735.     AL = 01h write modem control register
  2736.           BL = modem control register
  2737.           bit 0: data terminal ready
  2738.           bit 1: request to send
  2739.           bit 2: OUT1
  2740.           bit 3: OUT2
  2741.           bit 4: LOOP
  2742.           bits 5-7 reserved
  2743.           Return: AX = status
  2744.     DX = port number
  2745. SeeAlso: AH=00h
  2746. ---------------------------------------------
  2747. INT 14 - FOSSIL - DEINITIALIZE DRIVER
  2748.     AH = 05h
  2749.     DX = port number
  2750. Return: none
  2751.     DTR is not affected
  2752. SeeAlso: AH=00h
  2753. ---------------------------------------------
  2754. INT 14 - FOSSIL - RAISE/LOWER DTR
  2755.     AH = 06h
  2756.     DX = port
  2757.     AL = DTR state to be set
  2758.         00h = lower
  2759.         01h = raise
  2760. SeeAlso: AH=1Ah
  2761. ---------------------------------------------
  2762. INT 14 - FOSSIL - RETURN TIMER TICK PARAMETERS
  2763.     AH = 07h
  2764. Return: AL = timer tick interrupt number
  2765.     AH = ticks per second on interrupt number in AL
  2766.     DX = approximate number of milliseconds per tick
  2767. SeeAlso: AH=16h
  2768. ---------------------------------------------
  2769. INT 14 - FOSSIL - FLUSH OUTPUT BUFFER WAITING TILL ALL OUTPUT IS DONE
  2770.     AH = 08h
  2771.     DX = port number
  2772. SeeAlso: AH=09h
  2773. ---------------------------------------------
  2774. INT 14 - FOSSIL - PURGE OUTPUT BUFFER THROWING AWAY ALL PENDING OUTPUT
  2775.     AH = 09h
  2776.     DX = port number
  2777. SeeAlso: AH=08h,0Ah
  2778. ---------------------------------------------
  2779. INT 14 - FOSSIL - PURGE INPUT BUFFER THROWING AWAY ALL PENDING INPUT
  2780.     AH = 0Ah
  2781.     DX = port number
  2782. SeeAlso: AH=09h
  2783. ---------------------------------------------
  2784. INT 14 - FOSSIL - TRANSMIT NO WAIT
  2785.     AH = 0Bh
  2786.     AL = character
  2787.     DX = port number
  2788. Return: AX = 0000h character not accepted
  2789.        = 0001h character accepted
  2790. SeeAlso: AH=01h
  2791. ---------------------------------------------
  2792. INT 14 - FOSSIL - NON-DESTRUCTIVE READ AHEAD
  2793.     AH = 0Ch
  2794.     DX = port number
  2795. Return: AX = FFFFh character not available
  2796.     AX = 00xxh character xx available
  2797. ---------------------------------------------
  2798. INT 14 - FOSSIL - KEYBOARD READ WITHOUT WAIT
  2799.     AH = 0Dh
  2800. Return: AX = FFFFh character not available
  2801.        = xxyyh standard IBM-style scan code
  2802. SeeAlso: AH=0Eh
  2803. ---------------------------------------------
  2804. INT 14 - FOSSIL - KEYBOARD READ WITH WAIT
  2805.     AH = 0Eh
  2806. Return: AX = xxyyh standard IBM-style scan code
  2807. SeeAlso: AH=0Dh
  2808. ---------------------------------------------
  2809. INT 14 - FOSSIL - ENABLE/DISABLE FLOW CONTROL
  2810.     AH = 0Fh
  2811.     AL = bit mask describing flow control requested
  2812.         0: xon/xoff on transmit (watch for xoff while sending)
  2813.         1: CTS/RTS (CTS on transmit/RTS on receive)
  2814.         2: reserved
  2815.         3: xon/xoff on receive (send xoff when buffer near full)
  2816.         4-7: all 1
  2817.     DX = port number
  2818. ---------------------------------------------
  2819. INT 14 - FOSSIL - EXTENDED ^C/^K CHECKING AND TRANSMIT ON/OFF
  2820.     AH = 10h
  2821.     AL = bit mask
  2822.         0: enable/disable ^C/^K checking
  2823.         1: enable/disable the transmitter
  2824.     DX = port number
  2825. ---------------------------------------------
  2826. INT 14 - FOSSIL - SET CURRENT CURSOR LOCATION
  2827.     AH = 11h
  2828.     DH = row
  2829.     DL = column
  2830. Note:    this is the same as INT 10/AH=02h
  2831. SeeAlso: AH=12h
  2832. ---------------------------------------------
  2833. INT 14 - FOSSIL - READ CURRENT CURSOR LOCATION
  2834.     AH = 12h
  2835. Return: DH = row
  2836.     DL = column
  2837. Note:    this is the same as INT 10/AH=03h
  2838. SeeAlso: AH=11h
  2839. ---------------------------------------------
  2840. INT 14 - FOSSIL - SINGLE CHARACTER ANSI WRITE TO SCREEN
  2841.     AH = 13h
  2842.     AL = character
  2843. Note:    should not be called if it is unsafe to call DOS
  2844. SeeAlso: AH=15h
  2845. ---------------------------------------------
  2846. INT 14 - FOSSIL - ENABLE OR DISABLE WATCHDOG PROCESSING
  2847.     AH = 14h
  2848.     AL = 01h enable watchdog
  2849.          00h disable watchdog
  2850.     DX = port number
  2851. ---------------------------------------------
  2852. INT 14 - FOSSIL - WRITE CHARACTER TO SCREEN USING BIOS SUPPORT ROUTINES
  2853.     AH = 15h
  2854.     AL = character
  2855. SeeAlso: AH=13h
  2856. ---------------------------------------------
  2857. INT 14 - FOSSIL - INSERT/DELETE FUNCTION FROM TIMER TICK CHAIN
  2858.     AH = 16h
  2859.     AL = function
  2860.         00h = delete
  2861.         01h = add
  2862.     ES:DX -> routine to call
  2863. Return: AX = 0000h successful
  2864.          0001h unsuccessful
  2865. SeeAlso: AH=07h
  2866. ---------------------------------------------
  2867. INT 14 - FOSSIL - REBOOT SYSTEM
  2868.     AH = 17h
  2869.     AL = method
  2870.         00h = cold boot
  2871.         01h = warm boot
  2872. ---------------------------------------------
  2873. INT 14 - FOSSIL - READ BLOCK
  2874.     AH = 18h
  2875.     CX = maximum number of characters to transfer
  2876.     DX = port number
  2877.     ES:DI -> user buffer
  2878. Return: AX = number of characters transfered
  2879. SeeAlso: AH=19h
  2880. ---------------------------------------------
  2881. INT 14 - FOSSIL - WRITE BLOCK
  2882.     AH = 19h
  2883.     CX = maximum number of characters to transfer
  2884.     DX = port number
  2885.     ES:DI -> user buffer
  2886. Return: AX = number of characters transfered
  2887. SeeAlso: AH=18h
  2888. ---------------------------------------------
  2889. INT 14 - FOSSIL - BREAK BEGIN OR END
  2890.     AH = 1Ah
  2891.     AL = 00h stop sending 'break'
  2892.          01h start sending 'break'
  2893.     DX = port number
  2894. SeeAlso: AH=06h
  2895. ---------------------------------------------
  2896. INT 14 - FOSSIL - RETURN INFORMATION ABOUT THE DRIVER
  2897.     AH = 1Bh
  2898.     DX = port number
  2899.     CX = size of user buffer
  2900.     ES:DI -> user buffer for driver info (see below)
  2901. Return: AX = number of characters transferred
  2902.  
  2903. Format of driver info:
  2904. Offset    Size    Description
  2905.  00h    WORD    size of structure in bytes
  2906.  02h    BYTE    FOSSIL spec driver conforms to
  2907.  03h    BYTE    revision level of this specific driver
  2908.  04h    DWORD    pointer to ASCIZ identification string
  2909.  08h    WORD    size of the input buffer
  2910.  0Ah    WORD    number of bytes left in buffer
  2911.  0Ch    WORD    size of the output buffer
  2912.  0Eh    WORD    number of bytes left in buffer
  2913.  10h    BYTE    width of screen
  2914.  11h    BYTE    length of screen
  2915.  12h    BYTE    actual baud rate, computer to modem
  2916. ---------------------------------------------
  2917. INT 14 - FOSSIL - INSTALL AN EXTERNAL APPLICATION FUNCTION
  2918.     AH = 7Eh
  2919.     AL = code assigned to external application
  2920.     ES:DX -> entry point
  2921. Return: AX = 1954h
  2922.     BL = code assigned to application (same as input AL)
  2923.     DH = 00h failed
  2924.          01h successful
  2925. SeeAlso: AH=7Fh
  2926. ---------------------------------------------
  2927. INT 14 - FOSSIL - REMOVE AN EXTERNAL APPLICATION FUNCTION
  2928.     AH = 7Fh
  2929.     AL = code assigned to external application
  2930.     ES:DX -> entry point
  2931. Return: AX = 1954h
  2932.     BL = code assigned to application (same as input AL)
  2933.     DH = 00h failed
  2934.          01h successful
  2935. SeeAlso: AH=7Eh
  2936. ---------------------------------------------
  2937. INT 14 - COURIERS.COM - INSTALLATION CHECK
  2938.     AH = 80h
  2939. Return: AH = E8h if loaded
  2940. Note:    COURIERS is a TSR utility by PC Magazine
  2941. ---------------------------------------------
  2942. INT 14 - COURIERS.COM - CHECK IF PORT BUSY
  2943.     AH = 81h
  2944.     AL = port number (1-4)
  2945. Return: AH = 00h port available
  2946.          01h port exists but already in use
  2947.          02h port nonexistent
  2948. Note:    COURIERS is a TSR utility by PC Magazine
  2949. SeeAlso: AH=83h,8Dh
  2950. ---------------------------------------------
  2951. INT 14 - COURIERS.COM - CONFIGURE PORT
  2952.     AH = 82h
  2953.     AL = port number (1-4)
  2954.     BX = speed (bps)
  2955.     CX = bit flags
  2956.         bit 0: enable input flow control
  2957.         bit 1: enable output flow control
  2958.         bit 2: use X.PC protocol (not yet implemented)
  2959. SeeAlso: AH=8Ch
  2960. ---------------------------------------------
  2961. INT 14 - COURIERS.COM - START INPUT
  2962.     AH = 83h
  2963.     ES:BX -> circular input buffer
  2964.     CX = length of buffer 
  2965.         (should be at least 128 bytes if input flow control enabled)
  2966. SeeAlso: AH=87h,8Dh
  2967. ---------------------------------------------
  2968. INT 14 - COURIERS.COM - READ CHARACTER
  2969.     AH = 84h
  2970. Return: ZF set if no characters available
  2971.     ZF clear
  2972.        AL = character
  2973.        AH = modem status bits
  2974.         bit 7: set on input buffer overflow
  2975. SeeAlso: AH=86h,89h
  2976. ---------------------------------------------
  2977. INT 14 - COURIERS.COM - FLUSH PENDING INPUT
  2978.     AH = 85h
  2979. SeeAlso: AH=88h
  2980. ---------------------------------------------
  2981. INT 14 - COURIERS.COM - START OUTPUT
  2982.     AH = 86h
  2983.     ES:BX -> output buffer
  2984.     CX = length of output buffer
  2985. SeeAlso: AH=83h
  2986. ---------------------------------------------
  2987. INT 14 - COURIERS.COM - OUTPUT STATUS
  2988.     AH = 87h
  2989. Return: AX = number of unsent characters
  2990. ---------------------------------------------
  2991. INT 14 - COURIERS.COM - ABORT OUTPUT
  2992.     AH = 88h
  2993. SeeAlso: AH=85h
  2994. ---------------------------------------------
  2995. INT 14 - COURIERS.COM - SEND SINGLE CHARACTER
  2996.     AH = 89h
  2997.     CL = character to send
  2998. SeeAlso: AH=84h
  2999. ---------------------------------------------
  3000. INT 14 - COURIERS.COM - SEND BREAK
  3001.     AH = 8Ah
  3002. ---------------------------------------------
  3003. INT 14 - COURIERS.COM - SET SPEED
  3004.     AH = 8Ch
  3005.     BX = speed in bps
  3006. SeeAlso: AH=82h
  3007. ---------------------------------------------
  3008. INT 14 - COURIERS.COM - DECONFIGURE PORT
  3009.     AH = 8Dh
  3010. SeeAlso: AH=82h
  3011. ---------------------------------------------
  3012. INT 15 - CASSETTE - TURN ON MOTOR (PC,Jr)
  3013.     AH = 00h
  3014. Return: CF set on error, AH = 86h if no cassette present
  3015. ---------------------------------------------
  3016. INT 15 - Amstrad PC1512 - GET AND RESET MOUSE COUNTS
  3017.     AH = 00h
  3018. Return: CX = signed X count
  3019.     DX = signed Y count
  3020. ---------------------------------------------
  3021. INT 15 - VMiX v2+ - INSTALLATION CHECK???
  3022.     AH = 00h
  3023. Return: DX = 0798h???
  3024. ---------------------------------------------
  3025. INT 15 - CASSETTE - TURN OFF MOTOR (PC,Jr)
  3026.     AH = 01h
  3027. Return: CF set on error, AH = 86h if no cassette present
  3028. ---------------------------------------------
  3029. INT 15 - Amstrad PC1512 - WRITE DATA TO NON-VOLATILE RAM
  3030.     AH = 01h
  3031.     AL = NVRAM location (00h to 3Fh)
  3032.     BL = NVRAM data value
  3033. Return: AH = return code
  3034.         00h OK
  3035.         01h address bad
  3036.         02h write error
  3037. SeeAlso: AH=02h"Amstrad"
  3038.  
  3039. Format of NVRAM:
  3040. Offset    Size    Description
  3041.  00h    BYTE    time of day: seconds
  3042.  01h    BYTE    alarm time: seconds
  3043.  02h    BYTE    time of day: minutes
  3044.  03h    BYTE    alarm time: minutes
  3045.  04h    BYTE    time of day: hours
  3046.  05h    BYTE    alarm time: hours
  3047.  06h    BYTE    day of week, 1 = Sunday
  3048.  07h    BYTE    day of month
  3049.  08h    BYTE    month
  3050.  09h    BYTE    year mod 100
  3051.  0Ah    BYTE    RTC status register A
  3052.         bit 7: set if date/time being updated
  3053.             6-4: time base speed, default 010 = 32768 Hz
  3054.             3-0: interrupt rate selection, default 0110 = 1024 Hz
  3055.  0Bh    BYTE    RTC status register B
  3056.         bit 7: clear if normal update, set if abort update
  3057.             6: periodic interrupt enable
  3058.             5: alarm interrupt enable
  3059.             4: update end interrupt enable
  3060.             3: square wave enable
  3061.             2: date mode (clear = BCD, set = binary)
  3062.             1: 24-hour format
  3063.             0: daylight saving time enable
  3064.  0Ch    BYTE    RTC status register C (read-only)
  3065.         bit 7: IRQF flag
  3066.             6: PF flag
  3067.             5: AF flag
  3068.             4: UF flag
  3069.  0Dh    BYTE    RTC status register D
  3070.         bit 7: battery good
  3071.  0Eh  6 BYTEs    time and date machine last used
  3072.  14h    BYTE    user RAM checksum
  3073.  15h    WORD    Enter key scancode/ASCII code
  3074.  17h    WORD    Forward delete key scancode/ASCII code
  3075.  19h    WORD    Joystick fire button 1 scancode/ASCII code
  3076.  1Bh    WORD    Joystick fire button 2 scancode/ASCII code
  3077.  1Dh    WORD    mouse button 1 scancode/ASCII code
  3078.  1Fh    WORD    mouse button 2 scancode/ASCII code
  3079.  21h    BYTE    mouse X scaling factor
  3080.  22h    BYTE    mouse Y scaling factor
  3081.  23h    BYTE    initial VDU mode and drive count
  3082.  24h    BYTE    initial VDU character attribute
  3083.  25h    BYTE    size of RAM disk in 2K blocks
  3084.  26h    BYTE    initial system UART setup byte
  3085.  27h    BYTE    initial external UART setup byte
  3086.  28h 24 BYTEs    available for user application
  3087. Note:    bytes 00h-0Dh are the same on the IBM AT as they are used/updated by
  3088.       the clock chip
  3089. ---------------------------------------------
  3090. INT 15 - VMiX - I/O CHANNEL OBJECT MANAGER
  3091.     AH = 01h
  3092.     STACK: WORD  object ID of requestor
  3093.            DWORD pointer to name of requested method
  3094.            WORD  arg1
  3095.            WORD  arg2
  3096.            WORD  arg3
  3097.            WORD  arg4
  3098. Return: DX:AX??? -> IRP structure or 0000h:0000h 
  3099. ---------------------------------------------
  3100. INT 15 - CASSETTE - READ DATA BLOCKS (PC,Jr)
  3101.     AH = 02h
  3102.     CX = count of bytes
  3103.     ES:BX -> data area
  3104. Return: CF set on error
  3105.     AH = status
  3106.         01h CRC error
  3107.         02h bad tape signals
  3108.         04h no data
  3109.         80h invalid command
  3110.         86h no cassette present
  3111.     DX = count of bytes read
  3112.     ES:BX = pointer past last byte read
  3113. ---------------------------------------------
  3114. INT 15 - Amstrad PC1512 - READ DATA FROM NON-VOLATILE RAM
  3115.     AH = 02h
  3116.     AL = NVRAM location (00h to 3Fh)
  3117. Return: AH = return code
  3118.         00h OK
  3119.         01h address bad
  3120.         02h checksum error
  3121.     AL = NVRAM data value
  3122. SeeAlso: AH=01h"Amstrad"
  3123. ---------------------------------------------
  3124. INT 15 - VMiX - MEMORY OBJECT MANAGER
  3125.     AH = 02h
  3126.     STACK:    WORD    object ID of requestor
  3127.         DWORD    pointer to name of requested method
  3128.         WORD    arg1
  3129.         WORD    arg2
  3130.         WORD    arg3
  3131.         WORD    arg4
  3132.         WORD    arg5
  3133. Return: DX:AX??? = pointer to memory block
  3134. ---------------------------------------------
  3135. INT 15 - CASSETTE - WRITE DATA BLOCKS (PC,Jr)
  3136.     AH = 03h
  3137.     CX = count of bytes to write
  3138.     ES:BX -> data area
  3139. Return: CF set on error
  3140.        AH = status (see AH=02h)
  3141.     ES:BX = pointer past last byte written
  3142.     CX = 0
  3143. ---------------------------------------------
  3144. INT 15 - Amstrad PC1512 - WRITE VDU COLOR PLANE WRITE REGISTER
  3145.     AH = 03h
  3146.     AL = value (I,R,G,B bits)
  3147. SeeAlso: AH=04h"Amstrad"
  3148. ---------------------------------------------
  3149. INT 15 - VMiX - PROMPTED CONSOLE INPUT
  3150.     AH = 03h
  3151.     STACK:    DWORD    pointer to ASCII prompt
  3152.         WORD    field outline character
  3153.         WORD    length of input field
  3154.         DWORD    address of pointer to input buffer
  3155.         WORD    number of characters input
  3156. Return: AX = length of input (input buffer is padded with blanks)
  3157. ---------------------------------------------
  3158. INT 15 - SYSTEM - BUILD ABIOS SYSTEM PARAMETER TABLE (PS)
  3159.     AH = 04h
  3160.     ES:DI -> results buffer length 20h for System Parameter Table
  3161.     DS = segment containing ABIOS RAM extensions (zero if none)
  3162. Return: AH = 00h success: results at ES:DI
  3163.     CF set on failure
  3164. SeeAlso: AH=05h"ABIOS",C1h
  3165.  
  3166. Format of ABIOS System Parameter Table:
  3167. Offset    Size    Description
  3168.  00h    DWORD    FAR address of ABIOS Common Start Routine
  3169.  04h    DWORD    FAR address of ABIOS Interrupt Routine
  3170.  08h    DWORD    FAR address of ABIOS Time-out Routine
  3171.  0Ch    WORD    number of bytes of stack required by this ABIOS implementation
  3172.  0Eh 16 BYTEs    reserved
  3173.  1Eh    WORD    number of entries in initialisation table
  3174. ---------------------------------------------
  3175. INT 15 - Amstrad PC1512 - WRITE VDU COLOR PLANE READ REGISTER
  3176.     AH = 04h
  3177.     AL = value (RDSEL1 and RDSEL0)
  3178. SeeAlso: AH=03h"Amstrad",05h"Amstrad"
  3179. ---------------------------------------------
  3180. INT 15 - VMiX - VPRINTF
  3181.     AH = 04h
  3182.     STACK:    DWORD    control string
  3183.         DWORD    array of arguments
  3184. ---------------------------------------------
  3185. INT 15 - SYSTEM - BUILD ABIOS INITIALISATION TABLE (PS)
  3186.     AH = 05h
  3187.     ES:DI -> results buffer length (18h * Number_of_Entries)
  3188.     DS = segment containing ABIOS RAM extensions (zero if none)
  3189. Return: AH = 00h success: results at ES:DI
  3190.     CF set on failure
  3191. SeeAlso: AH=04h"ABIOS",C1h
  3192.  
  3193. Format of one entry of ABIOS Initialisation Table:
  3194. Offset    Size    Description
  3195.  00h    WORD    device ID
  3196.  02h    WORD    number of Logical IDs
  3197.  04h    WORD    Device Block length (zero for ABIOS patch or extension)
  3198.  06h    DWORD    -> init routine for Device Block and Function Transfer Table
  3199.  0Ah    WORD    request block length
  3200.  0Ch    WORD    Function Transfer Table length (zero for a patch)
  3201.  0Eh    WORD    Data Pointers length (in Common Data Area)
  3202.  10h    BYTE    secondary device ID (hardware level this ABIOS ver supports)
  3203.  11h    BYTE    revision (device driver revision level this ABIOS supports)
  3204.  12h  6 BYTEs    reserved
  3205. ---------------------------------------------
  3206. INT 15 - Amstrad PC1512 - WRITE VDU GRAPHICS BORDER REGISTER
  3207.     AH = 05h
  3208.     AL = value (I,R,G,B bits)
  3209. SeeAlso: AH=04h"Amstrad"
  3210. ---------------------------------------------
  3211. INT 15 - VMiX - GET PROCESS ID OF CURRENT PROCESS
  3212.     AH = 05h
  3213. Return: AX = process ID
  3214. ---------------------------------------------
  3215. INT 15 - Amstrad PC1512 - GET ROS VERSION NUMBER
  3216.     AH = 06h
  3217. Return: BX = version number
  3218. ---------------------------------------------
  3219. INT 15 - VMiX - GET POINTER TO PROCESS CONTROL BLOCK
  3220.     AH = 06h
  3221.     STACK:    WORD    process ID
  3222. Return: DX:AX??? -> process control block
  3223. ---------------------------------------------
  3224. INT 15 - VMiX - GET POINTER TO OBJECT CONTROL BLOCK
  3225.     AH = 07h
  3226.     STACK:    WORD    object type
  3227. Return: DX:AX??? -> object control block
  3228. ---------------------------------------------
  3229. INT 15 - VMiX - GET CHANNEL CONTROL BLOCK
  3230.     AH = 08h
  3231.     STACK:    WORD    channel ID
  3232. Return: DX:AX??? -> channel control block
  3233. ---------------------------------------------
  3234. INT 15 - VMiX - GET ID OF QUEUED ELEMENT
  3235.     AH = 09h
  3236.     STACK:    WORD    queue ID (0 = process queue, 1 = object, 3 = type)
  3237.         WORD    subqueue ID
  3238. Return: AX = ID
  3239. ---------------------------------------------
  3240. INT 15 - VMiX - GET ID OF NEXT QUEUED ELEMENT
  3241.     AH = 0Ah
  3242.     STACK:    WORD    queue ID (0 = process queue, 1 = object, 3 = type)
  3243.         WORD    ID of current element in queue chain
  3244. Return: AX = ID of next element
  3245. ---------------------------------------------
  3246. INT 15 - VMiX - GET TOTAL NUMBER OF ACTIVE PROCESSES
  3247.     AH = 0Bh
  3248. Return: AX = number of active processes
  3249. ---------------------------------------------
  3250. INT 15 - VMiX - GET POINTER TO PROCESS TSS STACK
  3251.     AH = 0Ch
  3252.     STACK:    WORD    process ID
  3253. Return: DX:AX??? -> TSS stack store
  3254. ---------------------------------------------
  3255. INT 15 - VMiX - START A CHILD PROCESS JOB SHELL
  3256.     AH = 0Dh
  3257.     STACK:    DWORD    ASCIZ string starting with requested I/O channel and
  3258.             followed by standard VMiX shell command string
  3259. Return: AX = status
  3260. SeeAlso: AH=0Eh"VMIX"
  3261. ---------------------------------------------
  3262. INT 15 - VMiX - TERMINATE PROCESS
  3263.     AH = 0Eh
  3264.     STACK:    WORD    process ID
  3265. Return: AX = status
  3266. SeeAlso: AH=0Dh"VMIX"
  3267. ---------------------------------------------
  3268. INT 15 - SYSTEM - FORMAT UNIT PERIODIC INTERRUPT (PS ESDI drives only)
  3269.     AH = 0Fh
  3270.     AL = phase code
  3271.         00h reserved
  3272.         01h surface analysis
  3273.         02h formatting
  3274. Return: CF clear if formatting should continue, set if it should terminate
  3275. Note:    called during ESDI drive formatting after each cylinder is completed
  3276. SeeAlso: INT 13/AH=1Ah
  3277. ---------------------------------------------
  3278. INT 15 - VMiX - GET KEY FIELD OF QUEUED ELEMENT
  3279.     AH = 0Fh
  3280.     STACK:    WORD    queue ID (0 = process queue, 1 = object q, 3 = type q)
  3281.         WORD    ID of element in queue chain
  3282. Return: AX = key
  3283. ---------------------------------------------
  3284. INT 15 - VMiX - EXECUTE FUNCTION IN PROTECTED MODE
  3285.     AH = 10h
  3286.     STACK:    DWORD    pointer to function
  3287.           N    WORDs    function args
  3288. Return: ???
  3289. ---------------------------------------------
  3290. INT 15 - TopView - "PAUSE" - GIVE UP CPU TIME
  3291.     AX = 1000h
  3292. Return: after other processes run
  3293. ---------------------------------------------
  3294. INT 15 - TopView - "GETMEM" - ALLOCATE "SYSTEM" MEMORY
  3295.     AX = 1001h
  3296.     BX = number of bytes to allocate
  3297. Return: ES:DI -> block of memory
  3298. SeeAlso: AX=1002h,DE0Ch
  3299. ---------------------------------------------
  3300. INT 15 - TopView - "PUTMEM" - DEALLOCATE "SYSTEM" MEMORY
  3301.     AX = 1002h
  3302.     ES:DI -> previously allocated block
  3303. Return: block freed
  3304. SeeAlso: AX=1001h,DE0Dh
  3305. ---------------------------------------------
  3306. INT 15 - TopView - "PRINTC" - DISPLAY CHARACTER/ATTRIBUTE ON SCREEN
  3307.     AX = 1003h
  3308.     BH = attribute
  3309.     BL = character
  3310.     DX = segment of object handle for window
  3311. Note:    BX=0 does not display anything, it only positions the hardware cursor
  3312. ---------------------------------------------
  3313. INT 15 - TopView - UNIMPLEMENTED IN DV 2.x
  3314.     AH = 10h
  3315.     AL = 04h thru 12h
  3316. Return: pops up "Programming error" window in DV 2.x
  3317. ---------------------------------------------
  3318. INT 15 - TopView - "GETBIT" - DEFINE A 2ND-LEVEL INTERRUPT HANDLER
  3319.     AX = 1013h
  3320.     ES:DI -> FAR service routine
  3321. Return: BX = bit mask indicating which bit was allocated
  3322.          0000h if no more bits available
  3323. SeeAlso: AX=1014h,1015h
  3324. ---------------------------------------------
  3325. INT 15 - TopView - "FREEBIT" - UNDEFINE A 2ND-LEVEL INTERRUPT HANDLER
  3326.     AX = 1014h
  3327.     BX = bit mask from INT 15/AX=1013h
  3328. SeeAlso: AX=1013h,1015h
  3329. ---------------------------------------------
  3330. INT 15 - TopView - "SETBIT" - SCHEDULE ONE OR MORE 2ND-LEVEL INTERRUPTS
  3331.     AX = 1015h
  3332.     BX = bit mask for interrupts to post
  3333. Return: indicated routines will be called: (DV 2.0x) at next task switch
  3334.                        (DV 2.2x) immediately
  3335. SeeAlso: AX=1013h,1014h
  3336. ---------------------------------------------
  3337. INT 15 - TopView - "ISOBJ" - VERIFY OBJECT HANDLE
  3338.     AX = 1016h
  3339.     ES:DI = possible object handle
  3340. Return: BX = FFFFh if ES:DI is a valid object handle
  3341.          0000h if ES:DI is not
  3342. SeeAlso: AX=DE14h
  3343. ---------------------------------------------
  3344. INT 15 - TopView - UNIMPLEMENTED IN DV 2.x
  3345.     AX = 1017h
  3346. Return: pops up "Programming error" window in DV 2.x
  3347. ---------------------------------------------
  3348. INT 15 - TopView - "LOCATE" - FIND WINDOW AT A GIVEN SCREEN LOCATION
  3349.     AX = 1018h
  3350.     BH = column
  3351.     BL = row
  3352.     ES = segment of object handle for window below which to search
  3353.          0000h = start search with topmost window
  3354. Return: ES = segment of object handle for window which is visible at the
  3355.          indicated position, or covered by indicated window
  3356. ---------------------------------------------
  3357. INT 15 - TopView - "SOUND" - MAKE TONE
  3358.     AX = 1019h
  3359.     BX = frequency in Hertz
  3360.     CX = duration in clock ticks (18.2 ticks/sec)
  3361. Return: immediately, tone continues to completion
  3362. Notes:    if another tone is already playing, the new tone does not start until
  3363.       completion of the previous one.  In DV 2.00, it is possible to enqueue
  3364.       about 32 tones before the process is blocked until a note completes.
  3365.     in DV 2.00, the lowest tone allowed is 20 Hz
  3366. ---------------------------------------------
  3367. INT 15 - TopView - "OSTACK" - SWITCH TO TASK'S INTERNAL STACK
  3368.     AX = 101Ah
  3369. Return: stack switched
  3370. SeeAlso: AX=1025h
  3371. ---------------------------------------------
  3372. INT 15 - TopView - "BEGINC" - BEGIN CRITICAL REGION
  3373.     AX = 101Bh
  3374. Return: task-switching temporarily disabled
  3375. Note:    will not task-switch until END CRITICAL REGION (AX = 101Ch) called
  3376. SeeAlso: AX=101Ch,DE13h
  3377. ---------------------------------------------
  3378. INT 15 - TopView - "ENDC" - END CRITICAL REGION
  3379.     AX = 101Ch
  3380. Return: task-switching enabled
  3381. SeeAlso: AX=101Bh,DE13h
  3382. ---------------------------------------------
  3383. INT 15 - TopView - "STOP" - STOP TASK
  3384.     AX = 101Dh
  3385.     ES = segment of object handle for task to be stopped
  3386.          (== handle of main window for that task)
  3387. Return: indicated task will no longer get CPU time
  3388. Note:    at least in DV 2.00, this function is ignored unless the indicated task
  3389.       is the current task.
  3390. SeeAlso: AX=101Eh,102Bh
  3391. ---------------------------------------------
  3392. INT 15 - TopView - "START" - START TASK
  3393.     AX = 101Eh
  3394.     ES = segment of object handle for task to be started
  3395.          (== handle of main window for that task)
  3396. Return: indicated task is started up again
  3397. SeeAlso: AX=101Dh,102Bh
  3398. ---------------------------------------------
  3399. INT 15 - TopView - "DISPEROR" - POP-UP ERROR WINDOW
  3400.     AX = 101Fh
  3401.     BX = bit fields
  3402.          bits 0-12: number of characters to display
  3403.          bits 13,14: which mouse button may be pressed to remove window
  3404.              00 = either
  3405.              01 = left
  3406.              10 = right
  3407.              11 = either
  3408.          bit 15: beep if 1
  3409.     DS:DI -> text of message
  3410.     CH = width of error window (0 = default)
  3411.     CL = height of error window (0 = default)
  3412.     DX = segment of object handle
  3413. Return: BX = status: 1 = left button, 2 = right, 27 = ESC pressed
  3414. Note:    window remains on-screen until ESC or indicated mouse button is pressed
  3415. ---------------------------------------------
  3416. INT 15 - TopView - UNIMPLEMENTED IN DV 2.0x
  3417.     AX = 1020h
  3418. Return: pops up "Programming error" window in DV 2.0x
  3419. ---------------------------------------------
  3420. INT 15 - TopView - "PGMINT" - INTERRUPT ANOTHER TASK
  3421.     AX = 1021h
  3422.     BX = segment of object handle for task to interrupt
  3423.     DX:CX -> FAR routine to jump to next time task is run
  3424. Return: nothing
  3425. Note:    the current ES, DS, SI, DI, and BP are passed to the FAR routine
  3426. ---------------------------------------------
  3427. INT 15 - TopView - "GETVER" - GET VERSION
  3428.     AX = 1022h
  3429.     BX = 0
  3430. Return: BX nonzero, TopView or compatible loaded
  3431.     (BL = major version, BH = minor version)
  3432. Notes:    TaskView returns BX = 0001h, DESQview 2.0 returns BX = 0A01h
  3433. ---------------------------------------------
  3434. INT 15 - TopView - "POSWIN" - POSITION WINDOW
  3435.     AX = 1023h
  3436.     BX = segment of object handle for parent window within which to
  3437.          position the window (0 = full screen)
  3438.     ES = segment of object handle for window to be positioned
  3439.     DL = bit flags
  3440.          bits 0,1: horizontal position
  3441.         00 = current
  3442.         01 = center
  3443.         10 = left
  3444.         11 = right
  3445.          bits 2,3: vertical position
  3446.         00 = current
  3447.         01 = center
  3448.         10 = top
  3449.         11 = bottom
  3450.          bit 4: don't redraw screen if set
  3451.          bits 5-7 not used
  3452.     CH = number of columns to offset from position specified by DL
  3453.     CL = number of rows to offset from position specified by DL
  3454. Return: nothing
  3455. ---------------------------------------------
  3456. INT 15 - TopView - "GETBUF" - GET VIRTUAL SCREEN INFO
  3457.     AX = 1024h
  3458.     BX = segment of object handle for window
  3459.           (0 = use default)
  3460. Return: ES:DI -> virtual screen
  3461.     CX = size of virtual screen in bytes
  3462.     DL = 00h text screen
  3463.          01h graphics screen
  3464. SeeAlso: INT 10/AH=FEh
  3465. ---------------------------------------------
  3466. INT 15 - TopView - "USTACK" - SWITCH BACK TO USER'S STACK
  3467.     AX = 1025h
  3468. Return: stack switched back
  3469. Note:    call only after having switched to private stack
  3470. SeeAlso: AX=101Ah
  3471. ---------------------------------------------
  3472. INT 15 - DESQview (TopView???) - UNIMPLEMENTED IN DV 2.x
  3473.     AH = 10h
  3474.     AL = 26h thru 2Ah
  3475. Return: pops up "Programming error" window in DV 2.x
  3476. ---------------------------------------------
  3477. INT 15 - DESQview 2.0 (TopView???) - "POSTTASK" - AWAKEN TASK
  3478.     AX = 102Bh
  3479.     BX = segment of object handle for task
  3480. Return: nothing
  3481. SeeAlso: AX=101Dh,101Eh
  3482. ---------------------------------------------
  3483. INT 15 - DESQview 2.0 (TopView???) - START NEW APPLICATION IN NEW PROCESS
  3484.     AX = 102Ch
  3485.     ES:DI -> contents of .PIF/.DVP file (see below)
  3486.     BX = size of .PIF/.DVP info
  3487. Return: BX = segment of object handle for new task
  3488.          0000h on error
  3489.  
  3490. Format of .PIF/.DVP file:
  3491. Offset    Size    Description
  3492.  00h    WORD    reserved (0)
  3493.  02h 30 BYTEs    program title (blank-padded)
  3494.  20h    WORD    maximum memory to allocate to partition in K
  3495.  22h    WORD    minimum memory required in K
  3496.  24h 64 BYTEs    ASCIZ program pathname
  3497.  64h    BYTE    default drive letter ('A',...)
  3498.  65h 64 BYTEs    ASCIZ default directory name
  3499.  A5h 64 BYTEs    ASCIZ program parameters
  3500.  E5h    BYTE    initial screen mode (0-7)
  3501.  E6h    BYTE    number of text pages used
  3502.  E7h    BYTE    number of first interrupt to save
  3503.  E8h    BYTE    number of last interrupt to save
  3504.  E9h    BYTE    rows in virtual screen buffer
  3505.  EAh    BYTE    columns in virtual screen buffer
  3506.  EBh    BYTE    initial window position, row
  3507.  ECh    BYTE    initial window position, column
  3508.  EDh    WORD    system memory in K
  3509.  EFh 64 BYTEs    ASCIZ shared program name
  3510. 12Fh 64 BYTEs    ASCIZ shared program data file
  3511. 16Fh    BYTE    flags1
  3512.         bit 7: writes text directly to screen
  3513.         bit 6: runs in foreground only
  3514.         bit 5: uses math coprocessor
  3515.         bit 4: accesses system keyboard buffer directly
  3516.         bits 3-1: reserved (0)
  3517.         bit 0: swappable
  3518. 170h    BYTE    flags2
  3519.         bit 6: uses command-line parameters in field at A5h
  3520.         bit 5: swaps interrupt vectors
  3521. ---information unique to .DVP files---
  3522. 171h  2 BYTEs    keys to use on open menu
  3523. 173h    WORD    size of script buffer in bytes
  3524. 175h    WORD    automatically give up CPU after this many tests for keyboard
  3525.         input in one clock tick (0 = never)
  3526. 177h    BYTE    nonzero = "uses own colors"
  3527. 178h    BYTE    nonzero if application swappable
  3528. 179h  3 BYTEs    reserved (0)
  3529. 17Ch    BYTE    nonzero to automatically close on exit
  3530. 17Dh    BYTE    nonzero if copy-protect floppy is required
  3531. ---information unique to DESQview 2.0+---
  3532. 17Eh    BYTE    .DVP version number
  3533.         00h DESQview 1.2+
  3534.         01h DESQview 2.0+
  3535.         02h DESQview 2.2+
  3536. 17Fh    BYTE    reserved (0)
  3537. 180h    BYTE    initial number of rows in physical window
  3538. 181h    BYTE    initial number of columns in physical window
  3539. 182h    WORD    maximum expanded memory to allow, in K
  3540. 184h    BYTE    flags3
  3541.         bit 7: automatically assign window position
  3542.         bit 5: maximum memory value has been specified
  3543.         bit 4: disallow "Close" command
  3544.         bit 3: foreground-only when doing graphics
  3545.         bit 2: don't virtualize
  3546. 185h    BYTE    keyboard conflict level (0-4)
  3547. 186h    BYTE    number of graphics pages used
  3548. 187h    WORD    extra system memory size
  3549. 189h    BYTE    initial screen mode (FFh = default)
  3550. ---information unique to DESQview 2.2+---
  3551. 18Ah    BYTE    serial port usage
  3552.         FFh uses all serial ports
  3553.         00h no serial ports
  3554.         01h only COM1
  3555.         02h only COM2
  3556. 18Bh    BYTE    flags4
  3557.         bit 7: automatically close application on exit if .COM or .EXE
  3558.             specified
  3559.         bit 6: swappable if not using serial ports
  3560.         bit 4: start program in background (v2.26+)
  3561.         bit 3: virtualize text
  3562.         bit 2: virtualize graphics
  3563.         bit 1: share CPU when foreground
  3564.         bit 0: share EGA when foreground and zoomed
  3565. 18Ch    BYTE    protection level for 386 machines
  3566. 18Dh 19 BYTEs    reserved (0)
  3567. ---------------------------------------------
  3568. INT 15 - DESQview 2.0 - KEYBOARD MOUSE CONTROL
  3569.     AX = 102Dh
  3570.     BL = subfunction
  3571.          00h determine whether using keyboard mouse
  3572.         Return: BL = 00h using real mouse
  3573.                  01h using keyboard mouse
  3574.          01h turn keyboard mouse on
  3575.          02h turn keyboard mouse off
  3576. ---------------------------------------------
  3577. INT 15 - TopView commands
  3578.     AH = 11h
  3579.     AL = various (except 17h)
  3580. Note:    in DESQview 2.x, these function calls are identical to AH=DEh, so
  3581.       see those below
  3582. SeeAlso: AH=DEh
  3583. ---------------------------------------------
  3584. INT 15 - VMiX - EXECUTE SHELL SYSTEM COMMANDS
  3585.     AH = 11h
  3586.     STACK:    DWORD    pointer to ASCIZ string containing and VMiX shell
  3587.             request (max len = 127)
  3588. Return: AX = status
  3589. ---------------------------------------------
  3590. INT 15 - DESQview 2.2+ - "ASSERTMAP" - GET/SET MAPPING CONTEXT
  3591.     AX = 1117h
  3592.     BX = 0000h    get current mapping context without setting
  3593.          nonzero    set new mapping context
  3594. Return: BX = mapping context in effect before call
  3595. Notes:    this function differs from AX = DE17h for DESQview v2.20 through 2.25
  3596.     mapping contexts determine conventional-memory addressability; setting
  3597.       a mapping context ensures that the associated program and data areas
  3598.       are in memory for access.  Usable by drivers, TSRs and shared
  3599.       programs.
  3600.     Caller need not be running under DESQview
  3601. ---------------------------------------------
  3602. INT 15 - DESQview - XDV.COM - INSTALLATION CHECK
  3603.     AX = 11DEh
  3604. Return: CF clear if installed
  3605.         AX = segment at which XDV is located
  3606. ---------------------------------------------
  3607. INT 15 - VMiX - PUT PROCESS TO SLEEP
  3608.     AH = 12h
  3609.     STACK:    WORD    process ID
  3610. Return: AX = status
  3611. ---------------------------------------------
  3612. INT 15 - TopView - SEND MESSAGE - "HANDLE" - RETURN OBJECT HANDLE
  3613.     AH = 12h
  3614.     BH = 00h
  3615.     BL = which handle to return
  3616.         00h handle in DWORD on top of stack
  3617.         01h current task's window handle
  3618.         02h given task's mailbox handle (task's handle on stack)
  3619.         03h current task's mailbox handle
  3620.         04h given task's keyboard handle (task's handle on stack)
  3621.         05h current task's keyboard object handle
  3622.         06h given task's OBJECTQ handle (task's handle on stack)
  3623.         07h current task's OBJECTQ handle
  3624.         08h   \
  3625.           thru > return 0000:0000
  3626.         10h   /
  3627. Return: DWORD on top of stack is object handle
  3628. ---------------------------------------------
  3629. INT 15 - TopView - SEND MESSAGE - "NEW" - CREATE NEW OBJECT
  3630.     AH = 12h
  3631.     BH = 01h
  3632.     BL = object
  3633.         00h (DV 2.0x only) handle is DWORD on top of stack
  3634.         01h (DV 2.0x only) use task's window handle
  3635.         02h (DV 2.0x only) given task's mailbox (task's handle on stack)
  3636.         03h (DV 2.0x only) current task's mailbox
  3637.         04h (DV 2.0x only) given task's keyboard (task's handle on stack)
  3638.         05h (DV 2.0x only) current task's keyboard object
  3639.         08h WINDOW class
  3640.         09h MAILBOX class
  3641.         0Ah KEYBOARD class
  3642.         0Bh TIMER object (counts down 32-bit time in 10ms increments)
  3643.         0Fh POINTER object
  3644.         10h PANEL object
  3645.     STACK: (if window object or WINDOW class)
  3646.            DWORD address to jump to (no new task if high word == 0)
  3647.            DWORD (reserved) 0 = non-task window, FFFFh = task window
  3648.            DWORD bytes for task's private stack (FFFFh == default of 0100h)
  3649.            DWORD bytes system memory allocation (0 == none, -1 == default)
  3650.            DWORD window size, columns
  3651.            DWORD window size, rows
  3652.            DWORD length of window title
  3653.            DWORD address of window title
  3654. Return: DWORD on top of stack is new object handle
  3655. Note:    if a new task is created, it is started with
  3656.       AX = BX = CX = SI = DI = BP = 0
  3657.       DX = segment of parent's object handle
  3658.       DS = ES = SS = segment of private stack (and new task's handle)
  3659. SeeAlso: AH=12h/BH=02h
  3660. ---------------------------------------------
  3661. INT 15 - TopView - SEND MESSAGE - "FREE" - FREE AN OBJECT
  3662.     AH = 12h
  3663.     BH = 02h
  3664.     BL = object
  3665.         00h handle in DWORD on top of stack
  3666.         window: close window and free
  3667.         timer: free timer
  3668.         panel: free panel object
  3669.         pointer: free pointer
  3670.         01h task's window handle - kills task, never returns
  3671.         02h given task's mailbox (task's handle on top of stack)
  3672.         03h current task's mailbox
  3673.         04h given task's keyboard (task's handle on top of stack)
  3674.         05h current task's keyboard object
  3675. SeeAlso: AH=12h/BH=01h
  3676. ---------------------------------------------
  3677. INT 15 - TopView - SEND MESSAGE - "DIR" - GET PANEL FILE DIRECTORY
  3678.     AH = 12h
  3679.     BX = 0300h
  3680.     STACK: DWORD handle of panel object
  3681. Return: STACK: DWORD length of directory
  3682.            DWORD address of directory
  3683.  
  3684. Format of panel file:
  3685. Offset    Size    Description
  3686.  00h  2 BYTEs    C0h C3h
  3687.  02h    BYTE    number of panels in file
  3688.  03h    for each panel in file:
  3689.         8 BYTEs  blank-padded panel name
  3690.           DWORD  panel offset in file
  3691.           WORD   panel length
  3692.     data for panels (each consists of one or more window/query/manager
  3693.     streams)
  3694.         first byte of each panel must be 1Bh, fifth byte must be E5h
  3695. ---------------------------------------------
  3696. INT 15 - TopView - SEND MESSAGE - "ADDR" - GET OBJECT HANDLE
  3697.     AH = 12h
  3698.     BH = 03h
  3699.     BL = object
  3700.         00h handle in DWORD on top of stack
  3701.         02h sender of last msg read from mailbox (task's handle on stack)
  3702.         03h sender of last msg read from current task's mailbox
  3703. Return: DWORD on stack is handle
  3704. SeeAlso: AH=12h/BH=00h
  3705. ---------------------------------------------
  3706. INT 15 - TopView - SEND MESSAGE - "READ" - WAIT FOR TIMER TO EXPIRE
  3707.     AH = 12h
  3708.     BX = 0400h
  3709.     STACK: DWORD timer's handle
  3710. Return: STACK: DWORD time in 1/100 sec since midnight when timer expires
  3711. ---------------------------------------------
  3712. INT 15 - TopView - SEND MESSAGE - "READ" - GET NEXT RECORD
  3713.     AH = 12h
  3714.     BH = 04h
  3715.     BL = object
  3716.         00h handle is DWORD on top of stack
  3717.         window: read next logical line
  3718.         mailbox: wait for and get next message
  3719.         pointer: wait for and get next message
  3720.         01h read the next logical line from task's default window
  3721.         02h get next message from mailbox (task's handle on top of stack)
  3722.         03h get next message from current task's mailbox
  3723.         04h get the next input from keyboard (handle on top of stack)
  3724.         05h get the next input from task's default keyboard
  3725.         06h wait for input from any object in OBJECTQ (handle on stack)
  3726.         07h wait for input from any object in task's default OBJECTQ
  3727. Return: STACK: (if objectq) DWORD handle of object with input
  3728.            (otherwise)  DWORD number of bytes
  3729.                 DWORD address
  3730. SeeAlso: AH=12h/BH=05h
  3731. ---------------------------------------------
  3732. INT 15 - TopView - SEND MESSAGE - "APPLY" - WRITE PANEL TO WINDOW
  3733.     AH = 12h
  3734.     BX = 0400h
  3735.     STACK: DWORD handle of panel object
  3736.            DWORD window's handle or 0
  3737.            DWORD length of panel name
  3738.            DWORD pointer to panel name
  3739. Return: STACK: DWORD handle of created keyboard or 0
  3740.            DWORD handle of window which was used
  3741. Notes:    status of APPLY may be checked with STATUS message
  3742.     panel MUST have the following format
  3743.       first byte must be 1Bh (i.e. must start with a stream)
  3744.       first opcode in stream must be E5h
  3745.         single byte arg of opcode is interpreted thus:
  3746.           bit 7  \    11 means create new window
  3747.           bit 6  /    10 means create new field table for existing window
  3748.             01 means use existing window and field table
  3749.           bit 5 if set, panel contains a field table 
  3750.             (creates a new keyboard and puts it in field mode)
  3751.           bit 4 if set, panel contains input fields
  3752.           bit 3 if set, panel contains select fields but no input fields
  3753. --------------------------------------------
  3754. INT 15 - TopView - SEND MESSAGE - "WRITE" - WRITE TO OBJECT
  3755.     AH = 12h
  3756.     BH = 05h
  3757.     BL = object
  3758.         00h handle is DWORD on top of stack
  3759.         timer: start timer to end at a specified time
  3760.         pointer: move pointer icon to specified position
  3761.         02h send message by value/status=0 to mbox (task's handle on stack)
  3762.         03h send message by value/status=0 to current task's mailbox
  3763.         04h add input buffer to KEYBOARD queue (handle on top of stack)
  3764.         05h add input buffer to task's default KEYBOARD queue
  3765.         06h add an object to OBJECTQ (handle on top of stack)
  3766.         07h add an object to task's default OBJECTQ
  3767.     STACK: (if mailbox)  DWORD length
  3768.                  DWORD address
  3769.            (if keyboard) DWORD status (such as scan code)
  3770.                  DWORD length
  3771.                  DWORD address
  3772.            (if objectq)  DWORD handle of object to add
  3773.            (if timer)    DWORD 1/100ths seconds since midnight (actually
  3774.                    only accurate to 1/18 sec)
  3775.            (if pointer)  DWORD column relative to origin of window
  3776.                  DWORD row relative to origin of window
  3777. SeeAlso: AH=12h/BH=04h
  3778. ---------------------------------------------
  3779. INT 15 - TopView - SEND MESSAGE - "WRITE" - WRITE STRING TO WINDOW
  3780.     AH = 12h
  3781.     BH = 05h
  3782.     BL = object
  3783.         00h DWORD on top of stack is window handle
  3784.         01h write string to task's default window
  3785.     STACK: DWORD object handle if handle passed on stack
  3786.            DWORD total length of string (high word == 0)
  3787.            DWORD address of string to display
  3788. Return: indicated actions performed
  3789.     a. non-control characters are displayed
  3790.     b. CR/LF/BS/Tab cause the usual cursor movement
  3791.     c. ESC starts a data structure with additional commands
  3792. Note:    service routine will pop stack
  3793.  
  3794. Data Structure:
  3795.     MAGIC  DB  1Bh
  3796.     MODE   DB  ?   ; 00h, 01h, 10h, 14h-1Fh legal
  3797.     LENGTH DW  ?   ; length of remainder in bytes
  3798.     var-length fields follow, each an OPCODE followed by
  3799.          zero or more args
  3800.  
  3801. MODE 00h (set or display values) "WINDOW STREAM"
  3802.     Opcodes:args
  3803.     00h  display 20h blanks with the default attribute
  3804.     01h-1Fh display OPCODE blanks with the default attribute
  3805.     20h  display char with default attribute 20h times
  3806.          BYTE char to repeat
  3807.     21h-3Fh display char with default attribute OPCODE-20h times
  3808.          BYTE char to repeat
  3809.     40h  display 20h blanks with specified attribute
  3810.          BYTE attribute of blanks
  3811.     41h-5Fh display OPCODE-40h blanks with specified attribute
  3812.          BYTE attribute of blanks
  3813.     60h  display next 20h characters
  3814.          20h BYTES characters to display
  3815.     61h-7Fh display next OPCODE-60h characters
  3816.          N BYTES characters to display
  3817.     80h-87h  display N blanks with default attribute
  3818.          BYTE low 8 bits of 11-bit count (high 3 in low 3 bits of OPCODE)
  3819.               [000h means 800h]
  3820.     88h-8Fh display N copies of the character
  3821.          BYTE low 8 bits of 11-bit count (high 3 in low 3 bits of OPCODE)
  3822.               [000h means 800h]
  3823.          BYTE character to repeat
  3824.     90h-97h  display N blanks with specified attribute
  3825.          BYTE low 8 bits of 11-bit length (high 3 in low 3 bits of OPCODE)
  3826.               [000h means 800h]
  3827.          BYTE attribute
  3828.     98h-9FH  display string at logical cursor pos
  3829.          BYTE low 8 bits of 11-bit length (high 3 in low 3 bits of OPCODE)
  3830.               [000h means 800h]
  3831.          N BYTES string to display
  3832.     A0h  set logical cursor row
  3833.          BYTE row number (0 is top)
  3834.     A1h  set logical cursor column
  3835.          BYTE column number (0 is leftmost)
  3836.     A2h  set top edge of scrolling region
  3837.          BYTE row
  3838.     A3h  set left edge of scrolling region
  3839.          BYTE column
  3840.     A4h  set row of physical window position
  3841.          BYTE line
  3842.     A5h  set column of physical window position
  3843.          BYTE column
  3844.     A6h  set height of physical window
  3845.          BYTE #rows
  3846.     A7h  set width of physical window
  3847.          BYTE #columns
  3848.     A8h  set viewport row
  3849.          BYTE row
  3850.     A9h  set viewport column
  3851.          BYTE column
  3852.     AAh  set virtual screen height
  3853.          BYTE rows
  3854.     ABh  set virtual screen width
  3855.          BYTE columns
  3856.     ACh-AEh  unused
  3857.     AFh  set compatible/preferred video modes
  3858.          BYTE compatibility/preference mask
  3859.         bit 7    compatible with monochrome
  3860.         bit 6    compatible with color text, EGA/VGA graphics
  3861.         bit 5    compatible with medium-resolution CGA graphics
  3862.         bit 4    compatible with high-resolution CGA graphics
  3863.         bit 3    prefer monochrome
  3864.         bit 2    prefer color text, EGA/VGA graphics
  3865.         bit 1    prefer medium-resolution CGA graphics
  3866.         bit 0    prefer high-resolution CGA graphics
  3867.     B0h  move logical cursor down
  3868.          BYTE #rows (signed, negative values move up)
  3869.     B1h  move logical cursor right
  3870.          BYTE #cols (signed, negative values move left)
  3871.     B2h  shift top edge of scrolling region
  3872.          BYTE #rows (signed)
  3873.     B3h  shift left edge of scrolling region
  3874.          BYTE #cols (signed)
  3875.     B4h  shift window down
  3876.          BYTE #lines (signed)
  3877.     B5h  shift window right
  3878.          BYTE #columns (signed)
  3879.     B6h  expand physical window vertically
  3880.          BYTE #lines (signed)
  3881.     B7h  expand physical window horizontally
  3882.          BYTE #columns (signed)
  3883.     B8h  adjust viewport row
  3884.          BYTE #rows (signed)
  3885.     B9h  adjust viewport column
  3886.          BYTE #columns (signed)
  3887.     BAh  adjust virtual screen height
  3888.          BYTE #rows to increase (signed)
  3889.     BBh  adjust virtual screen width
  3890.          BYTE #cols to increase (signed)
  3891.     BCh-BFh  unused
  3892.     C0h  set logical cursor position
  3893.          BYTE row number (0 is top border)
  3894.          BYTE column number (0 is left border)
  3895.     C1h  set top left corner of scrolling region
  3896.          BYTE row
  3897.          BYTE column
  3898.     C2h  set window pos
  3899.          BYTE upper left row (no top border if 0)
  3900.          BYTE upper left column (no left border if 0)
  3901.     C3h  set current window size
  3902.          BYTE #rows
  3903.          BYTE #cols
  3904.     C4h  set upper left corner of viewport (portion of virtual screen
  3905.          displayed in window)
  3906.          BYTE row
  3907.          BYTE column
  3908.     C5h  set size of virtual screen
  3909.          BYTE #rows
  3910.          BYTE #cols
  3911.     C6h  unused
  3912.     C7h  unused
  3913.     C8h  set logical cursor relative to current position
  3914.          BYTE number of rows to move down (signed)
  3915.          BYTE number of columns to move right (signed)
  3916.     C9h  shift top left corner of scrolling region
  3917.          BYTE #rows (signed)
  3918.          BYTE #cols (signed)
  3919.     CAh  set window pos relative to current position
  3920.          BYTE number of rows to shift down (signed)
  3921.          BYTE number of columns to shift right (signed)
  3922.     CBh  set window size relative to current size
  3923.          BYTE number of rows to expand (signed)
  3924.          BYTE number of cols to expand (signed)
  3925.     CCh  shift viewport relative to current position
  3926.          BYTE rows to shift (signed)
  3927.          BYTE cols to shift (signed)
  3928.     CDh  resize virtual screen
  3929.          BYTE #rows to expand (signed)
  3930.          BYTE #cols to expand (signed)
  3931.     CEh  scroll text when using E8h-EBh/F8h-FBh opcodes (default)
  3932.     CFh  scroll attributes when using  E8h-EBh/F8h-FBh opcodes
  3933.     D0h  allow window frame to extend beyond screen
  3934.     D1h  always display a complete frame, even if window extends beyond 
  3935.          edge of screen
  3936.     D2h  allow DV to change colors on video mode switch (default)
  3937.     D3h  application changes colors
  3938.     D4h  window is visible
  3939.     D5h  window is hidden
  3940.     D6h  window has frame
  3941.     D7h  window unframed
  3942.     D8h  read characters from window (default)
  3943.     D9h  read attributes from window
  3944.     DAh  use logical attributes, which may be remapped
  3945.         attributes
  3946.            1 normal text
  3947.            2 highlighted normal text
  3948.            3 help text
  3949.            4 highlighted help text
  3950.            5 error message
  3951.            6 highlighted error message
  3952.            7 emphasized text
  3953.            8 marked text
  3954.            9-16 are reverse video versions of 1-8
  3955.     DBh  use physical attributes for characters
  3956.     DCh  enable special actions for control characters (default)
  3957.     DDh  disable special control char handling, all chars displayable by
  3958.          BIOS TTY call
  3959.     DEh  write both character and attribute (default)
  3960.     DFh  write character only, leave attribute untouched
  3961.     E0h  repeat following commands
  3962.          BYTE number of times
  3963.     E1h  end of commands to repeat, start repeating them
  3964.     E2h  set color
  3965.          BYTE color
  3966.     E3h  clear virtual screen
  3967.     E4h  redraw window
  3968.     E5h  select menu style
  3969.          BYTE style
  3970.         bits 5,4 = 01 use two-letter menu entries for remainder of
  3971.           this stream
  3972.     E5h  (panel file only)
  3973.          BYTE modifier
  3974.         bits 7,6 = 11 panel goes in new window
  3975.              = 01 panel uses existing window
  3976.         bit 5 = 1 create new keyboard in field mode
  3977.         bit 4 = 1 make newly-created keyboard active
  3978.         bit 3 reserved
  3979.         bit 2 = 1 stream defined exclusive input window (DV 2.2)
  3980.         bit 1 reserved
  3981.         bit 0 reserved
  3982.     E6h  create new window and perform rest of manipulations in new window
  3983.          BYTE number of rows
  3984.          BYTE number of columns
  3985.          Return: DWORD object handle returned on stack at end
  3986.     E7h  unused
  3987.     E8h  scroll area up (top left corner defined by opcode C1h)
  3988.          BYTE height
  3989.          BYTE width
  3990.     E9h  scroll area down (top left corner defined by opcode C1h)
  3991.          BYTE height
  3992.          BYTE width
  3993.     EAh  scroll area left (top left corner defined by opcode C1h)
  3994.          BYTE height
  3995.          BYTE width
  3996.     EBh  scroll area right (top left corner defined by opcode C1h)
  3997.          BYTE height
  3998.          BYTE width
  3999.     ECh  set logical attributes for window contents
  4000.          BYTE video modes command applies to
  4001.         bit 7    monochrome
  4002.         bit 6    color text, EGA/VGA graphics
  4003.         bit 5    medium-resolution CGA graphics
  4004.         bit 4    high-resolution CGA graphics
  4005.          BYTE which attributes to set
  4006.         bit 7  if set, copy single following byte to indicated attrs
  4007.         bits 4-6  # of first attribute to change - 1
  4008.         bits 0-3  # of consecutive attributes to change
  4009.          N BYTEs new attributes
  4010.     EDh  set logical attributes for window frame
  4011.          BYTE video modes command applies to (see opcode ECh)
  4012.          BYTE which attributes to set
  4013.         bit 7  if set, copy single following byte to indicated attrs
  4014.         bits 4-6  # of first attribute to change - 1
  4015.         bits 0-3  # of consecutive attributes to change
  4016.          N BYTEs new attributes
  4017.           attributes
  4018.                1 = top left corner
  4019.                2 = top right corner
  4020.                3 = bottom left corner
  4021.                4 = bottom right corner
  4022.                5 = top edge
  4023.                6 = bottom edge
  4024.                7 = left edge
  4025.                8 = right edge
  4026.     EEh  set characters for window frame
  4027.          BYTE video modes command applies to (see opcode ECh)
  4028.          BYTE which characters to set
  4029.         bit 7  if set, copy single following byte to indicated chars
  4030.         bits 4-6  # of first char to change - 1
  4031.         bits 0-3  # of consecutive chars to change
  4032.          N BYTEs new chars (same relative position as attributes above)
  4033.     EFh  set window name
  4034.          BYTE length of name
  4035.          N BYTEs name
  4036.     F0h  clear input field to blanks
  4037.          BYTE field number
  4038.     F1h  fill input field with character
  4039.          BYTE field number
  4040.          BYTE char
  4041.     F2h  set color of input field
  4042.          BYTE field number (1-N)
  4043.          BYTE attribute
  4044.     F3h  set initial contents of input field
  4045.          BYTE field number (1-N)
  4046.          N BYTEs enough chars to exactly fill field as defined by op FFh
  4047.     F4h  position cursor to specific input field
  4048.          BYTE field number (1-N)
  4049.     F5h  change field table entry
  4050.          BYTE field number
  4051.          7-8 BYTEs field table entry (see opcode FFh below)
  4052.     F6h  set field type
  4053.          BYTE field number
  4054.          BYTE type
  4055.     F7h  "broadcast write"    write data to fields with broadcast bit set
  4056.         in field table entry, in field number order
  4057.          N BYTEs (total length of all program output fields)
  4058.     F8h  scroll field up a line
  4059.          BYTE field number
  4060.     F9h  scroll field down a line
  4061.          BYTE field number
  4062.     FAh  scroll field left
  4063.          BYTE field number
  4064.     FBh  scroll field right
  4065.          BYTE field number
  4066.     FCh  set field table header
  4067.          BYTE number of fields
  4068.          BYTE screen behavior bits
  4069.         bit 7  reserved
  4070.         bit 6  set if menu items may be selected via keyboard
  4071.         bit 5  set if left mouse button may terminate entry
  4072.         bit 4  set if right mouse button may terminate entry
  4073.         bit 3  if set, select fields return contents or blanks rather
  4074.             than 'Y' or 'N'
  4075.         bit 2  if set, modified bits reset on return to application
  4076.         bits 0,1 = 00 no data returned on read of keyboard
  4077.                01 data returned as array of chars containing
  4078.                 all fields packed together, with no field
  4079.                 numbers
  4080.                10 data returned as numbered variable-length
  4081.                 records for all fields
  4082.                11 data returned as numbered variable-length
  4083.                 records for the fields which were modified
  4084.          BYTE current input field (updated by DESQview)
  4085.          BYTE current select field (updated by DESQview)
  4086.          BYTE attribute for select fields when they are pointed at
  4087.          BYTE attribute for select fields which have been selected
  4088.     FDh  reset modified bit for all fields
  4089.     FEh  reset selected and modified bits for all fields
  4090.     FFh  set up input fields
  4091.          6 BYTEs table header (see opcode FCh above)
  4092.          the field table entries, one for each field
  4093.          BYTE start row    \
  4094.          BYTE start column  \ if menu selection and start is to
  4095.          BYTE end row        / right or below end, select from kbd only
  4096.          BYTE end column   /
  4097.          BYTE field type
  4098.             bits 7,6 = 00 inactive (non-entry) field
  4099.                    01 echos keystrokes input to make menu selection
  4100.                    10 fill-in field
  4101.                    11 select field
  4102.             bit 5  field can be filled by broadcast write (F7h opcode)
  4103.             bit 4  reserved
  4104.             bit 3  reserved
  4105.             bit 2  reserved
  4106.             bit 1  set if field selected
  4107.             bit 0  set if field modified
  4108.          BYTE modifier
  4109.               if type is fill-in, then bit flags to determine behavior
  4110.               bit 7  if set, automatically enter CR when field full
  4111.               bit 6  move to next field when current field is full
  4112.               bit 5  if set, enter text from right end (for numbers)
  4113.               bit 4  if set, force input to uppercase
  4114.               bit 3  if set, clear old contents on first keystroke
  4115.               bit 2  if set, input returned when cursor moves out
  4116.                  of modified field (API level 2.02+)
  4117.               bit 1  reserved
  4118.               bit 0  reserved
  4119.               if select field, first key to press to activate
  4120.               00h if have to point-&-click or is an extended-ASCII
  4121.                   keystroke (only if two-key menus enabled)
  4122.          BYTE (select field only) normal color of field
  4123.          BYTE second key for select field.  This byte is present iff
  4124.               two-letter menu entries selected with opcode E5h, and
  4125.               in that case is present regardless of field type
  4126.          Note: DESQview uses and updates the actual copy of the information
  4127.            which is contained in the stream.  Thus this info must remain
  4128.            intact until after the data entry is complete.
  4129.  
  4130. MODE 01h "QUERY STREAM" (valid only for those opcodes listed here)
  4131.     A0h return logical cursor row in next byte
  4132.     A1h return logical cursor column in next byte
  4133.     A2h return top row of scrolling region in next byte
  4134.     A3h return left column of scrolling region in next byte
  4135.     A4h return row of physical window origin in next byte
  4136.     A5h return column of physical window origin in next byte
  4137.     A6h return height of physcial window in next byte
  4138.     A7h return width of physical window in next byte
  4139.     A8h return row of viewport origin in next byte
  4140.     A9h return column of viewport origin in next byte
  4141.     AAh return height of virtual screen in next byte
  4142.     ABh return width of virtual screen in next byte
  4143.     AFh return current video mode in next byte
  4144.     C0h return current logical cursor position in next two bytes
  4145.     C1h return top left corner of scrolling region in next two bytes
  4146.     C2h return current window position in next two bytes
  4147.     C3h return current window size in next two bytes
  4148.     C4h return current viewport origin in next two bytes
  4149.     C5h return current virtual screen size in next two bytes
  4150.     D0h \ overwritten with D0h if frames may fall off screen edge
  4151.     D1h /               D1h if frames always displayed entirely
  4152.     D2h \ overwritten with D2h if DESQview controls color palette
  4153.     D3h /               D3h if application changes color palette
  4154.     D4h \ overwritten with D4h if window visible
  4155.     D5h /               D5h if window hidden
  4156.     D6h \ overwritten with D6h if window has frame
  4157.     D7h /               D7h if window unframed
  4158.     D8h \ overwritten with D8h if reading characters from window
  4159.     D9h /               D9h if reading attributes from window
  4160.     DAh \ overwritten with DAh if using logical attributes
  4161.     DBh /               DBh if using physical attributes
  4162.     DCh \ overwritten with DCh if TTY control char interpretation on
  4163.     DDh /               DDh if TTY control char interpretation off
  4164.     DEh \ overwritten with DEh if writing both characters and attributes
  4165.     DFh /               DFh if leaving attributes untouched
  4166.     E2h return current color in next byte
  4167.     ECh get logical attributes for window contents
  4168.         BYTE execute call if currently in specified video mode
  4169.         bit 7    monochrome
  4170.         bit 6    color text, EGA/VGA graphics
  4171.         bit 5    medium-resolution CGA graphics
  4172.         bit 4    high-resolution CGA graphics
  4173.         BYTE which attributes to get
  4174.         bit 7 unused???
  4175.         bits 4-6 first attribute to get - 1
  4176.         bits 0-3 # consecutive attributes
  4177.         N BYTEs buffer to hold attributes
  4178.     EDh get logical attributes for window frame
  4179.         BYTE execute call if currently in video mode (see opcode ECh)
  4180.         BYTE which attributes to get
  4181.         bit 7 unused???
  4182.         bits 4-6 first attribute to get - 1
  4183.         bits 0-3 # consecutive attributes
  4184.         N BYTEs buffer to hold attributes
  4185.     EEh get characters for window frame
  4186.         BYTE execute call if currently in video mode (see opcode ECh)
  4187.         BYTE which attributes to get
  4188.         bit 7 unused???
  4189.         bits 4-6 first char to get - 1
  4190.         bits 0-3 # consecutive chars
  4191.         N BYTEs buffer to hold chars
  4192.     EFh return current window name
  4193.         BYTE    max length of returned name
  4194.         N BYTEs buffer to hold window name
  4195.     F3h return contents of input field
  4196.         BYTE field number
  4197.         N BYTEs buffer to hold field contents (size exactly equal to field
  4198.             size)
  4199.     F5h get field table entry
  4200.         BYTE field number
  4201.         7-8 BYTEs buffer to hold field table entry
  4202.     F6h get type of a field
  4203.         BYTE field number
  4204.         BYTE type
  4205.     FCh get field table header
  4206.         6 BYTEs buffer to store header
  4207.  
  4208. MODE 10h "MANAGER STREAM" (valid only for opcodes listed here)
  4209.     00h allow window to be moved horizontally
  4210.     01h allow window to be moved vertically
  4211.     02h allow window to change width
  4212.     03h allow window to change height
  4213.     04h allow window to be scrolled horizontally
  4214.     05h allow window to be scrolled vertically
  4215.     06h allow "Close Window" menu selection
  4216.     07h allow window to be hidden
  4217.     08h allow "Mark" menu
  4218.     0Eh allow "Scissors" menu
  4219.     10h allow DESQview main menu to be popped up
  4220.     11h allow "Switch Windows" menu
  4221.     12h allow "Open Window" menu
  4222.     13h allow "Quit" menu selection
  4223.     20h-33h opposite of 00h-13h, disallow specified action
  4224.     40h notify if horizontal position of window changes
  4225.     41h notify if vertical position of window changes
  4226.     42h notify if width of window changes
  4227.     43h notify if height of window changes
  4228.     44h notify if window scrolled horizontally
  4229.     45h notify if window scrolled vertically
  4230.     46h notify if window is closed--program has to clean up and exit itself
  4231.     47h notify if window is hidden
  4232.     48h notify if "?" on main menu selected
  4233.     49h notify if pointer message sent to window
  4234.     4Ah notify if window is made active
  4235.     4Bh notify if window is switched away from
  4236.     4Ch notify if video mode changes
  4237.     4Dh notify if "Scissors" menu "Cut" option selected
  4238.     4Eh notify if "Scissors" menu "Copy" option selected
  4239.     4Fh notify if "Scissors" menu "Paste" option selected
  4240.     50h notify if DESQview main menu popped up
  4241.     51h notify if DESQview main menu popped down
  4242.     60h-71h  opposite of 40h-51h: don't notify on specified event
  4243.     84h attach window to parent task's window (both move together)
  4244.     85h detach window from parent task's window (may move independently)
  4245.     86h disable background operation
  4246.     87h enable running in background
  4247.     88h set minimum size of physical window
  4248.         BYTE rows
  4249.         BYTE columns
  4250.     89h set maximum size of physical window
  4251.         BYTE rows
  4252.         BYTE cols
  4253.     8Ah set primary asynchronous notification routine
  4254.         DWORD address of routine, 0000h:0000h means none
  4255.           on entry ES:DI = handle of window, DS:SI is 32-bit value set
  4256.           by 8Bh opcode
  4257.                mailbox contains message indicating event
  4258.                   Opcode
  4259.                    40h  horizontal movement
  4260.                    DWORD object handle of window
  4261.                    BYTE  new row
  4262.                    BYTE  new col
  4263.                    41h  vertical movement
  4264.                    DWORD object handle of window
  4265.                    BYTE  new row
  4266.                    BYTE  new col
  4267.                    42h  horizontal size change
  4268.                    DWORD object handle of window
  4269.                    BYTE  new rows
  4270.                    BYTE  new cols
  4271.                    43h  vertical size change
  4272.                    DWORD object handle of window
  4273.                    BYTE  new rows
  4274.                    BYTE  new cols
  4275.                    44h  scrolled horizontally
  4276.                    DWORD object handle of window
  4277.                    BYTE  mouse row within window
  4278.                    BYTE  mouse column within window
  4279.                    BYTE  field mouse is on, 0 if none
  4280.                    BYTE  amount moved: >0 right, <0 left, 0 done
  4281.                    45h  scrolled vertically
  4282.                    DWORD object hande of window
  4283.                    BYTE  mouse row within window
  4284.                    BYTE  mouse column within window
  4285.                    BYTE  field mouse is on, 0 if none
  4286.                    BYTE  amount moved: >0 down, <0 up, 0 done
  4287.                    46h  window closed
  4288.                    DWORD object handle of window
  4289.                    BYTE  mouse pointer row
  4290.                    BYTE  mouse pointer column
  4291.                    BYTE  field mouse is on, 0 if none
  4292.                    47h  window hidden
  4293.                    48h  Help for Program selected
  4294.                    DWORD object handle of window
  4295.                    BYTE  mouse pointer row
  4296.                    BYTE  mouse pointer column
  4297.                    BYTE  field mouse is on, 0 if none
  4298.                    49h  pointer message sent to window
  4299.                    4Ah  switched to window from another ("raise")
  4300.                    4Bh  switched away from the window ("lower")
  4301.                    4Ch  video mode changed
  4302.                    BYTE new video mode
  4303.                    4Dh  Scissors/cUt selected
  4304.                    DWORD object handle of window
  4305.                    BYTE  row of upper left corner
  4306.                    BYTE  column of upper left corner
  4307.                    BYTE  field number ul corner is in, 0=none
  4308.                    DWORD handle of orphaned window created to
  4309.                      hold data
  4310.                    BYTE  height of region
  4311.                    BYTE  width of region
  4312.                    4Eh  Scissors/Copy selected
  4313.                    DWORD object handle of window
  4314.                    BYTE  row of upper left corner
  4315.                    BYTE  column of upper left corner
  4316.                    BYTE  field number ul corner is in, 0=none
  4317.                    DWORD handle of orphaned window created to
  4318.                      hold data
  4319.                    BYTE  height of region
  4320.                    BYTE  width of region
  4321.                    4Fh  Scissors/Paste selected
  4322.                    DWORD object handle of window
  4323.                    BYTE  row of upper left corner
  4324.                    BYTE  column of upper left corner
  4325.                    BYTE  field number ul corner is in, 0=none
  4326.                    DWORD handle of orphaned window with data
  4327.                    BYTE  height of region
  4328.                    BYTE  width of region
  4329.                    50h  main menu popped up
  4330.                    51h  main menu popped down
  4331.           routine should restore all registers before returning
  4332.     8Bh set async notification parameter
  4333.         DWORD 32-bit value passed to async routine in DS:SI
  4334.     ACh (DV2.2) perform regular select field attribute processing
  4335.     ADh (DV2.2) protect attributes in selected field from being lost
  4336.     AEh make window default notify window for owning app (API level 2.00+)
  4337.     AFh set selected field marker character
  4338.         BYTE character to display at left edge of selected fields
  4339.     BCh set standard field processing mode 
  4340.     BDh set alternate field processing mode (enables cursor pad for menus)
  4341.     BEh enables changing reverse logical attributes with ECh opcode
  4342.     BFh disables changing reverse logical attributes with ECh opcode
  4343.     C0h make current window topmost in system
  4344.     C1h force current process into foreground
  4345.     C2h make current window topmost in process
  4346.     C3h position mouse pointer relative to origin of current field
  4347.         BYTE rows below upper left corner of field
  4348.         BYTE columns to right of upper left corner of field
  4349.     C4h position mouse pointer relative to origin of given field
  4350.         BYTE field number
  4351.         BYTE rows below upper left corner of field
  4352.         BYTE columns to right of upper left corner of field
  4353.     C5h hide current window
  4354.     C6h show windows for this process
  4355.     C7h hide all windows for this process
  4356.     C8h suspend process and hide all its windows
  4357.     C9h force current process into background
  4358.     CAh make current window bottom-most in process
  4359.     CBh cancel current window manager operation, remove DV menu, give 
  4360.         control to topmost application
  4361.     CCh close window
  4362.     CEh reorder windows
  4363.         DWORD pointer to null-terminated list of words
  4364.           each word is segment of object handle for a window
  4365.  
  4366. MODES 14h to 1Fh "USER STREAMS"
  4367.     normally NOPs, but may be defined by SETESC message to invoke FAR
  4368.     routines, one for each mode number
  4369.       on entry to handler,
  4370.         DS:SI = first byte of actual stream (not header)
  4371.         CX = #bytes in stream
  4372.         ES:DI = window's handle
  4373. ---------------------------------------------
  4374. INT 15 - DESQview 2.2 - SEND MESSAGE - SET PRIORITY
  4375.     AH = 12h
  4376.     BH = 06h
  4377.     BL = object
  4378.         00h object handle in DWORD on top of stack
  4379.     STACK: DWORD new priority of object in task's OBJECTQ 
  4380. SeeAlso: AH=12h/BH=07h
  4381. ---------------------------------------------
  4382. INT 15 - DESQview 2.2 - SEND MESSAGE - GET PRIORITY
  4383.     AH = 12h
  4384.     BH = 07h
  4385.     BL = object
  4386.         00h object handle in DWORD on top of stack
  4387. Return: STACK: DWORD object priority
  4388. Note:    initially all objects have the same default value.  Should make 
  4389.     relative adjustments to this default value.
  4390. SeeAlso: AH=12h/BH=06h
  4391. ---------------------------------------------
  4392. INT 15 - TopView - SEND MESSAGE - "SIZEOF" - GET OBJECT SIZE
  4393.     AH = 12h
  4394.     BH = 08h
  4395.     BL = object
  4396.         00h handle in DWORD on top of stack
  4397.         timer: elapsed time since timer started
  4398.         pointer: number of messages queued to pointer object
  4399.         panel: number of panels in panel file
  4400.         01h total chars in current task's default window
  4401.         02h number of messages in task's mailbox (task's handle on stack)
  4402.         03h number of messages in current task's mailbox
  4403.         04h number of input buffers queued in task's kbd (handle on stack)
  4404.         05h number of input buffers queued for current task's default kbd
  4405.         06h number of objects queued in OBJECTQ (task's handle on stack)
  4406.         07h number of objects queued in current task's OBJECTQ
  4407. Return: DWORD on stack is result
  4408. SeeAlso: AH=12h/BH=09h
  4409. ---------------------------------------------
  4410. INT 15 - TopView - SEND MESSAGE - "LEN" - GET OBJECT LENGTH
  4411.     AH = 12h
  4412.     BH = 09h
  4413.     BL = object
  4414.         00h handle in DWORD on top of stack
  4415.         window: chars/line
  4416.         timer: timer remaining before timer expires
  4417.         01h number of chars/line in current task's default window
  4418. Return: DWORD on top of stack is length
  4419. SeeAlso: AH=12h/BH=08h
  4420. ---------------------------------------------
  4421. INT 15 - TopView - SEND MESSAGE - "ADDTO" - SET OBJECT BITS
  4422.     AH = 12h
  4423.     BH = 0Ah
  4424.     BL = object
  4425.         00h handle is DWORD on top of stack
  4426.         window: write characters and attributes
  4427.         timer: start timer for specified interval
  4428.         pointer: set control flags
  4429.         01h write characters and attributes to task's default window
  4430.         02h send message/status by value to mailbox (task's handle on stack)
  4431.         03h send message/status by value to current task's default mailbox
  4432.         04h set control flags on KEYBOARD object (handle on top of stack)
  4433.         05h set control flags on task's default KEYBOARD object
  4434.     STACK: (if mailbox) DWORD status
  4435.                 DWORD length of message
  4436.                 DWORD address
  4437.            (if timer)   DWORD duration in 1/100 seconds
  4438.            (if window)  DWORD count of characters
  4439.                 DWORD address of characters
  4440.                 DWORD count of attributes
  4441.                 DWORD address of attributes
  4442.            (otherwise)  DWORD bits to set
  4443. For keyboard objects, the bits have the following significance:
  4444.     bit 15 reserved, can't be set
  4445.     bit 14 unused
  4446.     bit 13 reserved, can't be set
  4447.     bit 12-5 unused
  4448.     bit 4  filter all keys (used with handler established by SETESC)
  4449.     bit 3  program continues executing while input in progress
  4450.     bit 2  insert mode active
  4451.     bit 1  keyboard is active
  4452.     bit 0  keyboard is in field mode
  4453. For pointer objects, the bits have the following significance:
  4454.     bit 15 reserved, can't be set
  4455.     bit 14-8 unused
  4456.     bit 7  mouse pointer is hidden while in window
  4457.     bit 6  get messages even if window not topmost
  4458.     bit 5  get messages even if window not foreground
  4459.     bit 4  mouse button must be held 1/2 second before it "clicks"
  4460.     bit 3  pointer position is relative to screen origin, not window origin
  4461.     bit 2  send message on button release as well as button press
  4462.     bit 1  unused???
  4463.     bit 0  send message only on button activity, not movement
  4464.            DV-specific, and INT 15h/AX=DE0Fh must have been called first
  4465. SeeAlso: AH=12h/BH=0Bh
  4466. ---------------------------------------------
  4467. INT 15 - TopView - SEND MESSAGE - "SUBFROM" - RESET OBJECT BITS
  4468.     AH = 12h
  4469.     BH = 0Bh
  4470.     BL = object
  4471.         00h handle is DWORD on top of stack
  4472.         window:  write attributes only
  4473.         mailbox: send message by reference
  4474.         pointer: reset control flags
  4475.         01h write attributes only to task's default window
  4476.         02h send msg/status by reference to mailbox (task's handle on stack)
  4477.         03h send msg/status by reference to current task's mailbox
  4478.         04h clear control flags on KEYBOARD object (handle on top of stack)
  4479.         05h clear control flags on task's default KEYBOARD object
  4480.         06h remove specific object from OBJECTQ (task's handle on stack)
  4481.         07h remove specific object from task's default OBJECTQ
  4482.     STACK: (if mailbox) DWORD status
  4483.                 DWORD length
  4484.                 DWORD address
  4485.            (if window)  DWORD number of attributes to write
  4486.                 DWORD address of attributes
  4487.            (if objectq) DWORD handle of object to remove
  4488.            (otherwise)  DWORD indicates which bits to clear
  4489. SeeAlso: AH=12h/BH=0Ah
  4490. ---------------------------------------------
  4491. INT 15 - TopView - SEND MESSAGE - "OPEN" - OPEN OBJECT
  4492.     AH = 12h
  4493.     BH = 0Ch
  4494.     BL = object
  4495.         00h handle is DWORD on top of stack
  4496.         window:   fill with given character
  4497.         keyboard: attach to a window
  4498.         timer:      open
  4499.         pointer:  start taking input for window
  4500.         panel:      associate with a panel file
  4501.         01h fill task's default window with given character
  4502.         02h open given task's mailbox for input (task's handle on stack)
  4503.         03h open current task's mailbox
  4504.         04h attach a KEYBOARD to a window (handle on top of stack)
  4505.         05h attach task's default KEYBOARD to a window
  4506.         06h open a task's OBJECTQ (task's handle on top of stack)
  4507.         07h open current task's OBJECTQ
  4508.      STACK: (if window)   DWORD character to fill with
  4509.         (if keyboard) DWORD handle of window to attach to
  4510.         (if pointer)  DWORD handle of window to attach to
  4511.         (if panel)    DWORD length of filename
  4512.                   DWORD address of filename
  4513.         (otherwise)   nothing
  4514. Notes: special action taken if first byte of panel file name is 1Bh
  4515.        if first two bytes of panel file "name" are C0hC3h, then the "name" IS
  4516.      the panel file
  4517.        result code of open may be retrieved with STATUS message
  4518. SeeAlso: AH=12h/BH=0Dh
  4519. ---------------------------------------------
  4520. INT 15 - TopView - SEND MESSAGE - "CLOSE" - CLOSE OBJECT
  4521.     AH = 12h
  4522.     BH = 0Dh
  4523.     BL = object
  4524.         00h handle is DWORD on top of stack
  4525.         timer:      close
  4526.         keyboard: detach from window
  4527.         pointer:  stop taking input
  4528.         panel:      close
  4529.         02h close given task's mailbox (task's handle on top of stack)
  4530.         03h close task's default mailbox
  4531.         04h close KEYBOARD object (handle on top of stack)
  4532.         05h close task's default KEYBOARD
  4533.         06h close givent task's OBJECTQ (task's handle on top of stack)
  4534.         07h close current task's OBJECTQ
  4535. SeeAlso: AH=12h/BH=0Ch
  4536. ---------------------------------------------
  4537. INT 15 - TopView - SEND MESSAGE - "ERASE" - ERASE OBJECT
  4538.     AH = 12h
  4539.     BH = 0Eh
  4540.     BL = object
  4541.         00h handle is DWORD on top of stack
  4542.         window:   clear
  4543.         keyboard: discard input
  4544.         timer:      cancel current interval
  4545.         pointer:  discard all pending messages
  4546.         01h clear task's default window
  4547.         02h discard all queued messages in mailbox (handle on top of stack)
  4548.         03h discard all queued messages in current task's default mailbox
  4549.         04h discard all input queued to KEYBOARD (handle on top of stack)
  4550.         05h discard all input queued to task's default KEYBOARD
  4551.         06h remove all objects from OBJECTQ (task's handle on top of stack)
  4552.         07h remove all objects from current task's OBJECTQ
  4553. SeeAlso: AH=12h/BH=02h
  4554. ---------------------------------------------
  4555. INT 15 - TopView - SEND MESSAGE - "STATUS" - GET OBJECT STATUS
  4556.     AH = 12h
  4557.     BH = 0Fh
  4558.     BL = object
  4559.         00h handle is DWORD on top of stack
  4560.         timer:     is it running?
  4561.         pointer: return status of last message
  4562.         panel:     verify success of last OPEN or APPLY
  4563.         02h return status of last msg READ from mailbox (handle on stack)
  4564.         03h return status of last msg READ from task's default mailbox
  4565.         04h get status of last msg from task's KEYBOARD (task handle on stk)
  4566.         05h get status of last msg from task's default KEYBOARD
  4567.         06h return whether OBJECTQ is open or not (handle on top of stack)
  4568.         07h return whether task's default OBJECTQ is open or not
  4569. Return: DWORD on top of stack is status
  4570. Note:    if object is a panel object, the status indicates the error code:
  4571.       14h panel name not in panel directory
  4572.       15h not enough memory to apply panel
  4573.       16h invalid panel format
  4574.       17h panel file already open
  4575.       81h-92h  DOS error codes+80h
  4576.       95h not enough memory to open panel file
  4577.       98h null panel file name
  4578. ---------------------------------------------
  4579. INT 15 - TopView - SEND MESSAGE - "EOF" - GET OBJECT EOF STATUS
  4580.     AH = 12h
  4581.     BH = 10h
  4582.     BL = object
  4583.         00h handle is DWORD on top of stack
  4584.         01h returns TRUE if logical cursor past end of task's def window
  4585.         02h return ??? for task's mailbox (task's handle on top of stack)
  4586.         03h return ??? for current task's mailbox
  4587. Return: DWORD on top of stack is status
  4588. ---------------------------------------------
  4589. INT 15 - TopView - SEND MESSAGE - "AT" - POSITION OBJECT CURSOR
  4590.     AH = 12h
  4591.     BH = 11h
  4592.     BL = object
  4593.         00h window's handle is DWORD on top of stack
  4594.         01h position logical cursor on task's default window
  4595.     STACK: DWORD column
  4596.            DWORD row
  4597. ---------------------------------------------
  4598. INT 15 - TopView - SEND MESSAGE - "SETNAME" - ASSIGN NAME TO MAILBOX
  4599.     AH = 12h
  4600.     BH = 11h
  4601.     BL = mailbox to name
  4602.         00h DWORD on top of stack is mailbox handle
  4603.         02h use given task's mailbox (task's handle on top of stack)
  4604.         03h use current task's default mailbox
  4605.     STACK: DWORD length of name
  4606.            DWORD address of name
  4607. SeeAlso: AX=DE0Eh
  4608. ---------------------------------------------
  4609. INT 15 - TopView - SEND MESSAGE - "SETSCALE" - SET POINTER SCALE FACTOR
  4610.     AH = 12h
  4611.     BX = 1100h
  4612.     STACK: DWORD object handle for pointer object
  4613.            DWORD number of colums to scale pointer position to
  4614.            DWORD number of rows to scale pointer position to
  4615. SeeAlso: AH=12h/BX=1200h
  4616. ---------------------------------------------
  4617. INT 15 - TopView - SEND MESSAGE - "READN" - GET NEXT N OBJECT BYTES
  4618.     AH = 12h
  4619.     BH = 12h
  4620.     BL = object
  4621.         00h handle is DWORD on top of stack
  4622.         01h read next N chars/attributes on task's default window
  4623.     STACK: DWORD count
  4624. Return: STACK: DWORD width of screen line
  4625.            DWORD address
  4626.            DWORD count actually read
  4627. SeeAlso: AH=12h/BH=04h
  4628. ---------------------------------------------
  4629. INT 15 - TopView - SEND MESSAGE - "GETSCALE" - GET POINTER SCALE FACTOR
  4630.     AH = 12h
  4631.     BX = 1200h
  4632.     STACK: DWORD object handle for pointer
  4633. Return: STACK: DWORD pointer pos scaled as if window were this many colums wide
  4634.            DWORD pointer pos scaled as if window were this many rows high
  4635. SeeAlso: AH=12h/BX=1100h
  4636. ---------------------------------------------
  4637. INT 15 - TopView - SEND MESSAGE - "REDRAW" - REDRAW WINDOW
  4638.     AH = 12h
  4639.     BH = 13h
  4640.     BL = window object
  4641.         00h DWORD on top of stack is handle for window to redraw
  4642.         01h redraw task's default window
  4643. ---------------------------------------------
  4644. INT 15 - TopView - SEND MESSAGE - "SETICON" - SPECIFY POINTER ICON
  4645.     AH = 12h
  4646.     BX = 1300h
  4647.     STACK: DWORD object handle for pointer
  4648.            DWORD character to use for pointer
  4649. ---------------------------------------------
  4650. INT 15 - TopView - SEND MESSAGE - "SETESC" - SET ESCAPE ROUTINE ADDRESS
  4651.     AH = 12h
  4652.     BH = 14h
  4653.     BL = message modifier
  4654.         00h handle is DWORD on top of stack
  4655.         01h define user stream
  4656.         04h intercept keystrokes from KEYBOARD to a window (handle on stack)
  4657.         05h intercept keystrokes from task's default KEYBOARD to a window
  4658.     STACK: (if window)   DWORD user stream number (14h-1Fh)
  4659.                  DWORD address of FAR user stream handler
  4660.            (if keyboard) DWORD address of FAR filter function
  4661.  
  4662. The keyboard filter function is called when the keyboard is in field mode.  On
  4663. entry,
  4664.     AL = character
  4665.     AH = 00h or extended ASCII code if AL = 00h
  4666.     BL = field number
  4667.     CH = cursor column
  4668.     CL = cursor row
  4669.     DL = field type modifier (sixth item in field table entry)
  4670.     DH = ??? (seventh item in field table entry)
  4671.     ES:SI = window's handle
  4672. (also, in DV 2.00, DS:DI points to the field table entry.  This may change in
  4673.  other versions)
  4674. The filter function should return
  4675.     AH = 00h use keystroke
  4676.          01h ignore keystroke
  4677.          >1 beep and ignore keystroke
  4678. ---------------------------------------------
  4679. INT 15 - TopView - SEND MESSAGE - "LOCK" - REQUEST EXCLUSIVE ACCESS TO RESOURCE
  4680.     AH = 12h
  4681.     BH = 14h
  4682.     BL = object
  4683.         00h mailbox handle is DWORD on top of stack
  4684.         02h use given task's mailbox (task's handle on top of stack)
  4685.         03h use current task's default mailbox
  4686. Note:    release exclusive access by sending CLOSE message to mailbox
  4687.     access may be requested multiple times, and requires multiple CLOSEs
  4688. SeeAlso: AH=12h/BH=0Dh
  4689. ---------------------------------------------
  4690. INT 15 - DESQview 2.2 - SEND MESSAGE - SET FLAGS
  4691.     AH = 12h
  4692.     BH = 15h
  4693.     BL = object
  4694.         00h DWORD on top of stack
  4695.         mailbox, keyboard, or pointer only
  4696.         02h mailbox for task whose handle is on top of stack
  4697.         03h mailbox for current task
  4698.         04h keyboard for task whose handle is on top of stack
  4699.         05h keyboard for current task
  4700.     STACK: DWORD flags
  4701.         if mailbox:
  4702.             bit 0: all mail messages in common memory
  4703.             bit 1: allow write even if closed
  4704.             bit 2: don't erase messages when mailbox closed
  4705.         if keyboard:
  4706.             bit 5: exclusive input when keyboard in use for input
  4707. Return: nothing
  4708. Note:    this call is only available if the API level has been set to at least
  4709.       2.2
  4710. SeeAlso: AH=12h/BH=16h
  4711. ---------------------------------------------
  4712. INT 15 - DESQview 2.2 - SEND MESSAGE - GET FLAGS
  4713.     AH = 12h 
  4714.     BH = 16h
  4715.     BL = object
  4716.         00h DWORD on top of stack
  4717.         mailbox, keyboard, or pointer only
  4718.         02h mailbox for task whose handle is on top of stack
  4719.         03h mailbox for current task
  4720.         04h keyboard for task whose handle is on top of stack
  4721.         05h keyboard for current task
  4722. Return: STACK: DWORD current control flags
  4723. Note:    this call is only available if the API level has been set to at least
  4724.       2.2
  4725. SeeAlso: AH=12h/BH=15h
  4726. ---------------------------------------------
  4727. INT 15 - VMiX - WAKE PROCESS
  4728.     AH = 13h
  4729.     STACK:    WORD    process ID
  4730. Return: AX = status
  4731. ---------------------------------------------
  4732. INT 15 - VMiX - CLEAR WINDOW
  4733.     AH = 14h
  4734.     STACK:    WORD    top left corner of window
  4735.         WORD    bottom right corner of window
  4736. Return: AX = status
  4737. ---------------------------------------------
  4738. INT 15 - VMiX - SET BANNER WINDOW MESSAGE
  4739.     AH = 15h
  4740.     STACK:    DWORD    pointer to ASCIZ banner    message
  4741. Return: AX = status
  4742. ---------------------------------------------
  4743. INT 15 - VMiX - SET ROOT WINDOW SIZE AND HOME CURSOR
  4744.     AH = 16h
  4745.     STACK:    DWORD    pointer to I/O Request Packet
  4746.         WORD    top left corner of window
  4747.         WORD    bottom right corner of window
  4748. Return: AX = status
  4749. ---------------------------------------------
  4750. INT 15 - VMiX - GET CONSOLE WINDOW COLORS
  4751.     AH = 17h
  4752. Return: AH = foreground color
  4753.     AL = background color
  4754. SeeAlso: AH=18h
  4755. ---------------------------------------------
  4756. INT 15 - VMiX - SET CONSOLE COLORS
  4757.     AH = 18h
  4758.     STACK:    WORD    new background/foreground colors
  4759. Return: AX = color
  4760. SeeAlso: AH=17h
  4761. ---------------------------------------------
  4762. INT 15 - VMiX v2+ - ???
  4763.     AH = 19h
  4764.     STACK: WORD ???
  4765. Return: ???
  4766. ---------------------------------------------
  4767. INT 15 - VMiX v2+ - ???
  4768.     AH = 1Ah
  4769.     STACK: 3 WORDs ???
  4770. Return: ???
  4771. ---------------------------------------------
  4772. INT 15 - VMiX v2+ - ???
  4773.     AH = 1Bh
  4774.     STACK: 5 WORDs ???
  4775. Return: ???
  4776. ---------------------------------------------
  4777. INT 15 - VMiX v2+ - ???
  4778.     AH = 1Ch
  4779.     STACK: 5 WORDs ???
  4780. Return: ???
  4781. ---------------------------------------------
  4782. INT 15 - VMiX v2+ - ???
  4783.     AH = 1Dh
  4784.     ???
  4785. Return: ???
  4786. ---------------------------------------------
  4787. INT 15 - VMiX v2+ - ???
  4788.     AH = 1Eh
  4789.     STACK: WORD ???
  4790. Return: ???
  4791. ---------------------------------------------
  4792. INT 15 - DOS 3.x PRINT.COM - DISABLE CRITICAL REGION FLAG (AT,XT286,PS50+)
  4793.     AX = 2000h
  4794. SeeAlso: AX=2001h
  4795. ---------------------------------------------
  4796. INT 15 - DOS 3.x PRINT.COM - SET CRITICAL REGION FLAG (AT,XT286,PS50+)
  4797.     AX = 2001h
  4798.     ES:BX -> byte which is to be incremented while in a DOS call
  4799. SeeAlso: AX=2000h
  4800. ---------------------------------------------
  4801. INT 15 - OS HOOK - SETUP SYSREQ ROUTINE (AT,XT286,PS50+)
  4802.     AX = 2010h
  4803.     ???
  4804. Return: ???
  4805. SeeAlso: AX=2011h
  4806. ---------------------------------------------
  4807. INT 15 - OS HOOK - COMPLETION OF SYSREQ FUNCTION (AT,XT286,PS50+)
  4808.     AX = 2011h
  4809.     ???
  4810. Return: ???
  4811. SeeAlso: AX=2010h
  4812. ---------------------------------------------
  4813. INT 15 - SYSTEM - POWER-ON SELF-TEST ERROR LOG (PS50+)
  4814.     AH = 21h
  4815.     AL = subfunction
  4816.         00h read POST log
  4817.         01h write POST log
  4818.         BH = device ID
  4819.         BL = error code
  4820. Return: CF set on error
  4821.     AH = status (00h OK, 01h list full, 80h invalid cmd, 86h unsupported)
  4822.     if function 00h:
  4823.        BX = number of error codes stored
  4824.        ES:DI -> error log
  4825. Note:    the log is a series of words, the first byte of which identifies the
  4826.       error code and the second the device.
  4827. ---------------------------------------------
  4828. INT 15 - SYSTEM - READ/MODIFY PROFILES (CONVERTIBLE)
  4829.     AH = 40h
  4830.     AL = subfunction
  4831.         00h get system profile in CX and BX
  4832.         01h set system profile from CX and BX
  4833.         02h get internal modem profile in BX
  4834.         03h set internal modem profile from BX
  4835. ---------------------------------------------
  4836. INT 15 - SYSTEM - WAIT ON EXTERNAL EVENT (CONVERTIBLE)
  4837.     AH = 41h
  4838.     AL = condition type
  4839.         bits 0-2: condition to wait for
  4840.              0 any external event
  4841.              1 compare and return if equal
  4842.              2 compare and return if not equal
  4843.              3 test and return if not zero
  4844.              4 test and return if zero
  4845.         bit 3:    reserved
  4846.         bit 4:    1=port address, 0=user byte
  4847.         bits 5-7: reserved
  4848.     BH = condition compare or mask value
  4849.     BL = timeout value times 55 milliseconds
  4850.         00h means no timeout
  4851.     DX = I/O port address if AL bit 4 set
  4852.     ES:DI -> user byte if AL bit 4 clear
  4853. ---------------------------------------------
  4854. INT 15 - SYSTEM - REQUEST POWER OFF (CONVERTIBLE)
  4855.     AH = 42h
  4856.     AL = 00h to use system profile
  4857.          01h to force suspend regardless of system profile
  4858. ---------------------------------------------
  4859. INT 15 - SYSTEM - READ SYSTEM STATUS (CONVERTIBLE)
  4860.     AH = 43h
  4861. Return: AL = status bits
  4862.         bit 0: LCD detached
  4863.         bit 1: reserved
  4864.         bit 2: RS232/parallel adapter powered on
  4865.         bit 3: internal modem powered on
  4866.         bit 4: power activated by alarm
  4867.         bit 5: standby power lost
  4868.         bit 6: external power in use
  4869.         bit 7: power low
  4870. ---------------------------------------------
  4871. INT 15 - SYSTEM - (DE)ACTIVATE INTERNAL MODEM POWER (CONVERTIBLE)
  4872.     AH = 44h
  4873.     AL = 00h to power off
  4874.          01h to power on
  4875. ---------------------------------------------
  4876. INT 15 - OS HOOK - KEYBOARD INTERCEPT (AT model 3x9,XT2,XT286,CONV,PS)
  4877.     AH = 4Fh
  4878.     AL = scan code
  4879.     CF set
  4880. Return: CF set
  4881.        AL = scan code
  4882.     CF clear
  4883.        scan code should be ignored
  4884. Note:    called by INT 9 handler to translate scan codes
  4885. SeeAlso: INT 09
  4886. ---------------------------------------------
  4887. INT 15 - OS HOOK - DEVICE OPEN (AT,XT2,XT286,PS)
  4888.     AH = 80h
  4889.     BX = device ID
  4890.     CX = process type
  4891. Return: CF set on error
  4892.         AH = status
  4893.     CF clear if successful
  4894.         AH = 00h        
  4895. SeeAlso: AH=81h,82h
  4896. ---------------------------------------------
  4897. INT 15 - OS HOOK - DEVICE CLOSE (AT,XT2,XT286,PS)
  4898.     AH = 81h
  4899.     BX = device ID
  4900.     CX = process type
  4901. Return: CF set on error
  4902.         AH = status
  4903.     CF clear if successful
  4904.         AH = 00h        
  4905. SeeAlso: AH=80h,82h
  4906. ---------------------------------------------
  4907. INT 15 - OS HOOK - DEVICE PROGRAM TERMINATE (AT,XT2,XT286,PS)
  4908.     AH = 82h
  4909.     BX = device ID
  4910. Return: CF set on error
  4911.         AH = status
  4912.     CF clear if successful
  4913.         AH = 00h        
  4914. Note:    closes all devices opened with function 80h
  4915. SeeAlso: AH=80h,81h
  4916. ---------------------------------------------
  4917. INT 15 - SYSTEM - EVENT WAIT (AT,XT286,CONV,PS)
  4918.     AH = 83h
  4919.     AL = subservice
  4920.         00h = set interval
  4921.         01h = cancel
  4922.     ES:BX -> event flag (bit 7 set when interval expires)
  4923.     CX:DX = number of microseconds to wait (only accurate to 977 us)
  4924. Return: CF set if function already busy
  4925. Note:    the resolution of the wait period is 977 microseconds on most systems
  4926.       because most BIOSes use the 1/1024 second fast interrupt from the AT
  4927.       real-time clock chip which is available on INT 70
  4928. SeeAlso: AH=86h, INT 70
  4929. ---------------------------------------------
  4930. INT 15 - SYSTEM - READ JOYSTICK (AT,XT2,XT286,PS)
  4931.     AH = 84h
  4932.     DX = subservice
  4933.         0000h get switch settings
  4934.         Return: AL = switch settings (bits 7-4)
  4935.         0001h read joystick inputs
  4936.         Return: AX = A(x) value
  4937.             BX = A(y) value
  4938.             CX = B(x) value
  4939.             DX = B(y) value
  4940. ---------------------------------------------
  4941. INT 15 - OS HOOK - SYSTEM REQUEST KEY PRESSED (AT,XT2,XT286,CONV,PS)
  4942.     AH = 85h
  4943.     AL = 00h press
  4944.        = 01h release
  4945. Return: CF set on error
  4946.     AH = status
  4947. Note:    called by keyboard decode routine
  4948. SeeAlso: INT 09
  4949. ---------------------------------------------
  4950. INT 15 - SYSTEM - WAIT (AT,XT2,XT286,CONV,PS)
  4951.     AH = 86h
  4952.     CX,DX = number of microseconds to wait (only accurate to 977 us)
  4953. Return: CF clear: after wait elapses
  4954.     CF set: immediately due to error
  4955. Note:    the resolution of the wait period is 977 microseconds on most systems
  4956.       because most BIOSes use the 1/1024 second fast interrupt from the AT
  4957.       real-time clock chip which is available on INT 70
  4958. SeeAlso: AH=83h, INT 70
  4959. ---------------------------------------------
  4960. INT 15 - EXTENDED MEMORY - BLOCK MOVE (AT,XT286,PS)
  4961.     AH = 87h
  4962.     CX = number of words to move
  4963.     ES:SI -> global descriptor table (see below)
  4964. Return: CF set on error
  4965.     AH = status
  4966.         00h source copied into destination
  4967.         01h parity error
  4968.         02h interrupt error
  4969.         03h address line 20 gating failed
  4970. SeeAlso: AH=88h
  4971.  
  4972. Format of global descriptor table:
  4973. Offset    Size    Description
  4974.  00h 16 BYTEs    zeros
  4975.  10h    WORD    source segment length in bytes (2*CX-1 or greater)
  4976.  12h  3 BYTEs    24-bit linear source address, low byte first
  4977.  15h    BYTE    source segment access rights (93h)
  4978.  16h    WORD    zero
  4979.  18h    WORD    destination segment length in bytes (2*CX-1 or greater)
  4980.  1Ah  3 BYTEs    24-bit linear destination address, low byte first
  4981.  1Dh    BYTE    destination segment access rights (93h)
  4982.  1Eh 18 BYTEs    zeros
  4983. ---------------------------------------------
  4984. INT 15 - EXTENDED MEMORY - GET MEMORY SIZE (AT,XT286,PS)
  4985.     AH = 88h
  4986. Return: AX = memory size in K
  4987. SeeAlso: AH=87h
  4988. Note:    TSRs which wish to allocate extended memory to themselves often hook
  4989.       this call, and return a reduced memory size.  They are then free to
  4990.       use the memory between the new and old sizes at will.
  4991. ---------------------------------------------
  4992. INT 15 - SYSTEM - SWITCH TO VIRTUAL MODE (AT,XT286,PS50+)
  4993.     AH = 89h
  4994.     BL = interrupt number of IRQ0 (IRQ1-7 use next 7 interrupts)
  4995.     BH = interrupt number of IRQ8 (IRQ9-F use next 7 interrupts)
  4996.     DS:SI -> GDT for protected mode
  4997.            offset 0h  null descriptor
  4998.               8h  GDT descriptor
  4999.              10h  IDT descriptor
  5000.              18h  DS
  5001.              20h  ES
  5002.              28h  SS
  5003.              30h  CS
  5004.              38h  uninitialized, used to build descriptor for BIOS CS
  5005.     CX = offset into protected-mode CS to jump to
  5006. Return: CF set on error
  5007.        AH = 0FFh  error enabling address line 20
  5008.     in protected mode at specified address if successful
  5009. SeeAlso: INT 67/AX=DE0Ch
  5010. ---------------------------------------------
  5011. INT 15 - OS HOOK - DEVICE BUSY LOOP (AT,XT2,XT286,CONV,PS)
  5012.     AH = 90h
  5013.     AL = type code
  5014.         00h disk
  5015.         01h diskette
  5016.         02h keyboard
  5017.         03h PS/2 pointing device
  5018.         80h network
  5019.         FCh disk reset
  5020.         FDh diskette motor start
  5021.         FEh printer
  5022.     ES:BX -> request block for type codes 80h through BFh
  5023. Return: CF set if wait time satisfied
  5024.     CF clear if driver must perform wait
  5025. Note:    type codes are allocated as follows:
  5026.       00-7F non-reentrant devices; OS must arbitrate access
  5027.       80-BF reentrant devices; ES:BX points to a unique control block
  5028.       C0-FF wait-only calls, no complementary INT 15/AH=91h call
  5029. SeeAlso: AH=91h
  5030. ---------------------------------------------
  5031. INT 15 - OS HOOK - SET FLAG AND COMPLETE INTERRUPT (AT,XT2,XT286,CONV,PS)
  5032.     AH = 91h
  5033.     AL = type code (see AH=90h)
  5034.     ES:BX -> request block for type codes 80h through BFh
  5035. Return: AH = 00h
  5036. SeeAlso: AH=90h
  5037. ---------------------------------------------
  5038. INT 15 - SYSTEM - GET CONFIGURATION (XT after 1/10/86,AT mdl 3x9,CONV,XT286,PS)
  5039.     AH = C0h
  5040. Return: CF set if BIOS doesn't support call
  5041.     CF clear on success
  5042.         ES:BX -> ROM table (see below)
  5043. Note:    the 1/10/86 XT BIOS returns an incorrect value for the feature byte
  5044.  
  5045. Format of ROM configuration table:
  5046. Offset    Size    Description
  5047.  00h    WORD    number of bytes following
  5048.  02h    BYTE    model (see below)
  5049.  03h    BYTE    submodel (see below)
  5050.  04h    BYTE    BIOS revision: 0 for first release, 1 for 2nd, etc.
  5051.  05h    BYTE    features:
  5052.         bit 7 = DMA channel 3 used by hard disk BIOS
  5053.         bit 6 = 2nd 8259 installed
  5054.         bit 5 = Real-Time Clock installed
  5055.         bit 4 = INT 15h/AH=4Fh called upon INT 9h
  5056.         bit 3 = wait for external event supported
  5057.         bit 2 = extended BIOS area allocated at 640K
  5058.         bit 1 = bus is Micro Channel instead of ISA
  5059.         bit 0 reserved
  5060.  06h    WORD    reserved (0)
  5061.  08h    WORD    reserved (0)
  5062.  0Ah        AWARD copyright notice here
  5063.  
  5064. Values for model/submodel/revision:
  5065. Model  Submdl  Rev    BIOS date    System
  5066.  FFh    *    *    04/24/81    PC (original)
  5067.  FFh    *    *    10/19/81    PC (some bugfixes)
  5068.  FFh    *    *    10/27/82    PC (HD, 640K, EGA support)
  5069.  FEh    *    *    08/16/82    PC XT
  5070.  FEh    *    *    11/08/82    PC XT and Portable
  5071.  FDh    *    *    06/01/83    PCjr
  5072.  FCh    *    *    01/10/84    AT models 068,099 6 MHz 20MB
  5073.  FCh    00h    01h    06/10/85    AT model  239      6 MHz 30MB
  5074.  FCh    00h    <> 01h      ???        7531/2 Industrial AT
  5075.  FCh    01h    00h    11/15/85    AT models 319,339 8 MHz, Enh Keyb, 3.5"
  5076.  FCh    01h    ???      ???        Compaq 286/386
  5077.  FCh    02h    00h    04/21/86    PC XT-286
  5078.  FCh    04h    00h    02/13/87     ** PS/2 Model 50
  5079.  FCh    04h    03h    04/18/88    PS/2 Model 50Z
  5080.  FCh    05h    00h    02/13/87     ** PS/2 Model 60
  5081.  FCh    06h    ???      ???        7552 "Gearbox"
  5082.  FCh    09h    02h    06/28/89    PS/2 Model 30-286
  5083.  FCh    81h    00h    01/15/88    Phoenix 386 BIOS v1.10 10a
  5084.  FBh    00h    01h    01/10/86    PC XT, Enh Keyb, 3.5" support
  5085.  FBh    00h    02h    05/09/86    PC XT
  5086.  FAh    00h    00h    09/02/86    PS/2 Model 30
  5087.  FAh    00h    01h    12/12/86    PS/2 Model 30
  5088.  FAh    01h    00h      ???        PS/2 Model 25
  5089.  F9h    00h    00h    09/13/85    PC Convertible
  5090.  F8h    00h    00h    03/30/87     ** PS/2 Model 80 16MHz
  5091.  F8h    01h    00h    10/07/87    PS/2 Model 80 20MHz
  5092.  F8h    04h    02h    04/11/88    PS/2 Model 70, at least model -121
  5093.  F8h    04h    03h    03/17/89    PS/2 Model 70, at least model -M61
  5094.  F8h    09h    ???      ???        PS/2 Model 70 some models
  5095.  F8h    09h    02h    04/11/88    PS/2 Model 70 some models
  5096.  F8h    09h    03h    03/17/89    PS/2 Model 70 some models
  5097.  F8h    0Ch    00h    11/02/88    PS/2 Model 55SX
  5098.  F8h    1Bh    00h    10/02/89    PS/2 Model 70-486
  5099.  9Ah    *    *      ???        Compaq XT/Compaq Plus
  5100.  30h    ???    ???      ???        Sperry PC
  5101.  2Dh    *    *      ???        Compaq PC/Compaq Deskpro
  5102.  
  5103.     * This BIOS call is not implemented in these early versions.
  5104.       Read Model byte at F000h:FFFEh and BIOS date at F000h:FFF5h.
  5105.    ** These BIOS versions require the DASDDRVR.SYS patches.
  5106. ---------------------------------------------
  5107. INT 15 - SYSTEM - RETURN EXTENDED-BIOS DATA-AREA SEGMENT ADDRESS (PS)
  5108.     AH = C1h
  5109. Return: CF set on error
  5110.     CF clear if successful
  5111.         ES = segment of data area
  5112. SeeAlso: AH=04h"ABIOS"
  5113. ---------------------------------------------
  5114. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - ENABLE/DISABLE
  5115.     AX = C200h
  5116.     BH = 00h disable
  5117.          01h enable
  5118. Return: CF set on error
  5119.     AH = status
  5120.         00h successful
  5121.         01h invalid function
  5122.         02h invalid input
  5123.         03h interface error
  5124.         04h need to resend
  5125.         05h no device handler installed
  5126. ---------------------------------------------
  5127. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - RESET
  5128.     AX = C201h
  5129. Return: CF set on error
  5130.          AH = status (see AX=C200h)
  5131.     CF clear if successful
  5132.         BH = device ID
  5133. SeeAlso: INT 33/AX=0000h
  5134. ---------------------------------------------
  5135. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - SET SAMPLING RATE
  5136.     AX = C202h
  5137.     BH = sampling rate
  5138.         00h 10/second
  5139.         01h 20/second
  5140.         02h 40/second
  5141.         03h 60/second
  5142.         04h 80/second
  5143.         05h 100/second
  5144.         06h 200/second
  5145. Return: CF set on error
  5146.         AH = status (see AX=C200h)
  5147. SeeAlso: INT 33/AX=001Ch
  5148. ---------------------------------------------
  5149. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - SET RESOLUTION
  5150.     AX = C203h
  5151.     BH = resolution
  5152.         00h one count per mm
  5153.         01h two counts per mm
  5154.         02h four counts per mm
  5155.         03h eight counts per mm
  5156. Return: CF set on error
  5157.         AH = status (see AX=C200h)
  5158. ---------------------------------------------
  5159. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - GET TYPE
  5160.     AX = C204h
  5161. Return: CF set on error
  5162.         AH = status (see AX=C200h)
  5163.     CF clear if successful
  5164.         BH = device ID
  5165. ---------------------------------------------
  5166. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - INITIALIZE
  5167.     AX = C205h
  5168.     BH = data package size (1 - 8 bytes)
  5169. Return: CF set on error
  5170.         AH = status (see AX=C200h)
  5171. SeeAlso: AX=C201h
  5172. ---------------------------------------------
  5173. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - GET/SET SCALING FACTOR
  5174.     AX = C206h
  5175.     BH = subfunction
  5176.         00h return device status
  5177.         Return: BL = status
  5178.                bit 0: right button pressed
  5179.                bit 1: reserved
  5180.                bit 2: left button pressed
  5181.                bit 3: reserved
  5182.                bit 4: 0 if 1:1 scaling, 1 if 2:1 scaling
  5183.                bit 5: device enabled
  5184.                bit 6: 0 if stream mode, 1 if remote mode
  5185.                bit 7: reserved
  5186.             CL = resolution (see AX=C203h)
  5187.               DL = sample rate, reports per second
  5188.         01h set scaling at 1:1
  5189.          02h set scaling at 2:1
  5190. Return: CF set on error
  5191.         AH = status (see AX=C200h)
  5192. ---------------------------------------------
  5193. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - SET DEVICE HANDLER ADDR
  5194.     AX = C207h
  5195.     ES:BX = user device handler
  5196. Return: CF set on error
  5197.         AH = status (see AX=C200h)
  5198. SeeAlso: INT 33/AX=000Ch
  5199. --------------------------------------------
  5200. INT 15 - SYSTEM - ENABLE/DISABLE WATCHDOG TIMEOUT (PS50+)
  5201.     AH = C3h
  5202.     AL = 00h disable
  5203.          01h enable
  5204.         BX = timer counter
  5205. Return: CF set on error
  5206.     CF clear if successful
  5207. Note:    the watchdog timer generates an NMI
  5208. ---------------------------------------------
  5209. INT 15 - SYSTEM - PROGRAMMABLE OPTION SELECT (PS50+)
  5210.     AH = C4h
  5211.     AL = 00h return base POS register address
  5212.          01h enable slot
  5213.          BL = slot number
  5214.          02h enable adapter
  5215. Return: CF set on error
  5216.     DX = base POS register address (if function 00h)
  5217. ---------------------------------------------
  5218. INT 15 - DESQview - GET PROGRAM NAME
  5219.     AX = DE00h
  5220. Return: AX = offset into DESQVIEW.DVO of current program's record (see below)
  5221. SeeAlso: AX=DE07h
  5222.  
  5223. Format of program entry in DESQVIEW.DVO:
  5224. Offset    Size    Description
  5225.  00h    BYTE    length of name
  5226.  01h  N BYTEs    name
  5227.       2 BYTEs    keys to invoke program (second = 00h if only one key used)
  5228.     WORD    ??? seems always to be 0000h
  5229.     BYTE    end flag: 00h for all but last entry, which is FFh
  5230. ---------------------------------------------
  5231. INT 15 - DESQview - UPDATE "OPEN WINDOW" MENU
  5232.     AX = DE01h
  5233. Return: nothing
  5234. Note:    reads DESQVIEW.DVO, disables Open menu if file not in current directory
  5235. ---------------------------------------------
  5236. INT 15 - DESQview 1.x only - SET ??? FLAG FOR CURRENT WINDOW
  5237.     AX = DE02h
  5238. Return: nothing
  5239. Note:    this call is a NOP in DV 2.x
  5240. SeeAlso: AX=DE03h
  5241. ---------------------------------------------
  5242. INT 15 - DESQview 1.x only - GET ??? FOR CURRENT WINDOW
  5243.     AX = DE03h
  5244. Return: AX = ??? for current window
  5245.     BX = ??? for current window
  5246. Note:    this call is a NOP in DV 2.x
  5247. SeeAlso: AX=DE02h
  5248. ---------------------------------------------
  5249. INT 15 - DESQview - GET AVAILABLE COMMON MEMORY
  5250.     AX = DE04h
  5251. Return: BX = bytes of common memory available
  5252.     CX = largest block available
  5253.     DX = total common memory in bytes
  5254. SeeAlso: AX=DE05h,DE06h
  5255. ---------------------------------------------
  5256. INT 15 - DESQview - GET AVAILABLE CONVENTIONAL MEMORY
  5257.     AX = DE05h
  5258. Return: BX = K of memory available
  5259.     CX = largest block available
  5260.     DX = total conventional memory in K
  5261. SeeAlso: AX=DE04h,DE06h
  5262. ---------------------------------------------
  5263. INT 15 - DESQview - GET AVAILABLE EXPANDED MEMORY
  5264.     AX = DE06h
  5265. Return: BX = K of expanded memory available
  5266.     CX = largest block available
  5267.     DX = total expanded memory in K
  5268. SeeAlso: AX=DE04h,DE05h
  5269. ---------------------------------------------
  5270. INT 15 - DESQview - "APPNUM" - GET CURRENT PROGRAM'S NUMBER
  5271.     AX = DE07h
  5272. Return: AX = number of program as it appears on the "Switch Windows" menu
  5273. SeeAlso: AX=DE00h
  5274. ---------------------------------------------
  5275. INT 15 - DESQview - GET ???
  5276.     AX = DE08h
  5277. Return: AX = 0000h if ??? is not set to the current task
  5278.          0001h if ??? is set to the current task
  5279. ---------------------------------------------
  5280. INT 15 - DESQview - UNIMPLEMENTED
  5281.     AX = DE09h
  5282. Return: nothing (NOP in DV 1.x and 2.x)
  5283. ---------------------------------------------
  5284. INT 15 - DESQview 2.x - "DBGPOKE" - DISPLAY CHARACTER ON STATUS LINE
  5285.     AX = DE0Ah
  5286.     BL = character
  5287. Return: character displayed, next call will display in next position (which
  5288.     wraps back to the start of the line if off the right edge of screen)
  5289. Notes:    displays character on bottom line of *physical* screen, regardless
  5290.       of current size of window (even entirely hidden)
  5291.     does not know about graphics display modes, just pokes the characters
  5292.       into display memory
  5293. SeeAlso: AX=1003h
  5294. ---------------------------------------------
  5295. INT 15 - DESQview 2.x - "APILEVEL" - DEFINE MINIMUM API LEVEL REQUIRED
  5296.     AX = DE0Bh
  5297.     BL = API level major version number
  5298.     BH = API level minor version number
  5299. Return: AX = maximum API level (AL = major, AH = minor)
  5300. Notes:    if the requested API level is greater than the version of DESQview, a
  5301.       "You need a newer version" error window is popped up
  5302.     some early copies of DV 2.00 return AX=0200h instead of 0002h
  5303. ---------------------------------------------
  5304. INT 15 - DESQview 2.x - "GETMEM" - ALLOCATE "SYSTEM" MEMORY
  5305.     AX = DE0Ch
  5306.     BX = number of bytes
  5307. Return: ES:DI -> allocated block
  5308. SeeAlso: AX=1001h,DE0Dh
  5309. ---------------------------------------------
  5310. INT 15 - DESQview 2.x - "PUTMEM" - DEALLOCATE "SYSTEM" MEMORY
  5311.     AX = DE0Dh
  5312.     ES:DI -> previously allocated block
  5313. Return: nothing
  5314. SeeAlso: AX=1002h,DE0Ch
  5315. ---------------------------------------------
  5316. INT 15 - DESQview 2.x - FIND MAILBOX BY NAME
  5317.     AX = DE0Eh
  5318.     ES:DI -> name to find
  5319.     CX = length of name
  5320. Return: BX = 0000h not found
  5321.          0001h found
  5322.         DS:SI = object handle
  5323. SeeAlso: AH=12h/BH=11h
  5324. ---------------------------------------------
  5325. INT 15 - DESQview 2.x - ENABLE DESQview EXTENSIONS
  5326.     AX = DE0Fh
  5327. Return: AX and BX destroyed (seems to be bug, weren't saved&restored)
  5328. Notes:    sends a manager stream with opcodes AEh, BDh, and BFh to task's window
  5329.     enables an additional mouse mode
  5330. ---------------------------------------------
  5331. INT 15 - DESQview 2.x - "PUSHKEY" - PUT KEY INTO KEYBOARD INPUT STREAM
  5332.     AX = DE10h
  5333.     BH = scan code
  5334.     BL = character
  5335. Return: nothing
  5336. Note:    a later read will get the keystroke as if it had been typed by the user
  5337.     early copies of DV 2.00 destroy AX, BX, ES, and DI
  5338. SeeAlso: INT 16/AH=05h
  5339. ---------------------------------------------
  5340. INT 15 - DESQview 2.x - ENABLE/DISABLE AUTOMATIC JUSTIFICATION OF WINDOW
  5341.     AX = DE11h
  5342.     BL = 00h      viewport will not move automatically
  5343.          nonzero  viewport will move to keep cursor visible
  5344. Return: nothing
  5345. ---------------------------------------------
  5346. INT 15 - DESQview 2.01+ - SET ???
  5347.     AX = DE12h
  5348.     BX = 0000h    clear ??? flag
  5349.          nonzero  set ??? flag
  5350. Return: nothing
  5351. ---------------------------------------------
  5352. INT 15 - DESQview 2.2 - GET CRITICAL NESTING COUNT
  5353.     AX = DE13h
  5354. Return: BX = number of calls to BEGINC (see INT 15/AX=101Bh) without matching
  5355.          ENDC (see INT 15/AX=101Ch)
  5356. SeeAlso: AX=101Bh,101Ch,DE1Bh,DE1Ch
  5357. ---------------------------------------------
  5358. INT 15 - DESQview 2.2 - GET OBJECT TYPE
  5359.     AX = DE14h
  5360.     ES:DI -> object
  5361. Return: BL = 00h not an object
  5362.          08h window or task
  5363.          09h mailbox
  5364.          0Ah keyboard
  5365.          0Bh timer
  5366.          0Ch objectq
  5367.          0Fh pointer
  5368.          10h panel
  5369. SeeAlso: AX=1016h
  5370. ---------------------------------------------
  5371. INT 15 - DESQview 2.2 - SET MAILBOX ERROR HANDLING
  5372.     AX = DE15h
  5373.     BL = 00h post system error on conditions listed below
  5374.          01h return carry flag set on calls to ADDTO, SUBFROM, and WRITE
  5375.          messages sent to mailboxes which fail due to lack of system
  5376.          or common memory
  5377. Return: nothing
  5378. SeeAlso: AX=DE16h
  5379. ---------------------------------------------
  5380. INT 15 - DESQview 2.2 - GET MAILBOX ERROR HANDLING
  5381.     AX = DE16h
  5382. Return: BL = 00h post system error
  5383.          01h return carry flag set
  5384. SeeAlso: AX=DE15h
  5385. ---------------------------------------------
  5386. INT 15 - DESQview 2.20-2.25 - reserved
  5387.     AX = DE17h
  5388. Return: pops up "Programming error" window
  5389. Note:    AX = 1117h is NOT identical to this call under DESQview 2.20 thru 2.25
  5390. ---------------------------------------------
  5391. INT 15 - DESQview 2.26+ - "ASSERTMAP" - GET/SET MAPPING CONTEXT
  5392.     AX = 1117h
  5393.     BX = 0000h    get current mapping context without setting
  5394.          nonzero    set new mapping context
  5395. Return: BX = mapping context in effect before call
  5396. Notes:    mapping contexts determine conventional-memory addressability; setting
  5397.       a mapping context ensures that the associated program and data areas
  5398.       are in memory for access.  Usable by drivers, TSRs and shared
  5399.       programs.
  5400.     Caller need not be running under DESQview
  5401. ---------------------------------------------
  5402. INT 15 - DESQview 2.2 - ???
  5403.     AX = DE18h
  5404.     BP = function number
  5405.         high byte must be 10h
  5406.         low byte is function
  5407.         00h set ???
  5408.             BL = ???  (00h-10h, video mode???)
  5409.             BH = value to store
  5410.         03h set ???
  5411.             BL = ??? (stored in driver)
  5412.         0Ah get ???
  5413.             ES:DI -> 18-byte buffer to hold ???
  5414. Note:    calls video driver (NOP for Hercules driver,probably CGA and MCGA also)
  5415. ---------------------------------------------
  5416. INT 15 - DESQview 2.26 - ALLOCATE "COMMON" MEMORY
  5417.     AX = DE19h
  5418.     BX = number of bytes to allocate
  5419. Return: AX = 0000h successful
  5420.         ES:DI -> allocated block
  5421.          0001h insufficient memory
  5422. SeeAlso: AX=DE0Ch,DE1Ah
  5423. ---------------------------------------------
  5424. INT 15 - DESQview 2.26 - DEALLOCATE "COMMON" MEMORY
  5425.     AX = DE1Ah
  5426.     DS:SI -> previously allocated block
  5427. Return: ???
  5428. SeeAlso: AX=DE0Dh,DE19h
  5429. ---------------------------------------------
  5430. INT 15 - DESQview 2.26 - DECREMENT CRITICAL NESTING COUNT
  5431.     AX = DE1Bh
  5432. Return: nothing
  5433. SeeAlso: AX=DE13h,DE1Ch
  5434. ---------------------------------------------
  5435. INT 15 - DESQview 2.26 - INCREMENT CRITICAL NESTING COUNT
  5436.     AX = DE1Ch
  5437. Return: nothing
  5438. SeeAlso: AX=DE13h,DE1Bh
  5439. ---------------------------------------------
  5440. INT 15 - DESQview 2.26 - ???
  5441.     AX = DE1Dh
  5442.     DX = segment of ??? object
  5443.     ???
  5444. Return: AX = ???
  5445. ---------------------------------------------
  5446. INT 15 - DESQview 2.26 - GET TRUE VIDEO PARAMETERS
  5447.     AX = DE1Eh
  5448. Return: BL = actual video mode (may differ from INT 10/AH=0Fh return)
  5449.     CL = actual number of rows on screen
  5450.     CH = actual number of columns on screen
  5451. SeeAlso: INT 10/AH=0Fh
  5452. ---------------------------------------------
  5453. INT 15 - DESQview 2.26 - GET ???
  5454.     AX = DE1Fh
  5455. Return: BX = segment of ??? object or 0000h if none
  5456. ---------------------------------------------
  5457. INT 15 - DESQview 2.26 - INTERRUPT ANOTHER TASK
  5458.     AX = DE20h
  5459.     BX = segment of handle of task to interupt
  5460.     DX:CX -> interrupt routine
  5461. Return: ???
  5462. ---------------------------------------------
  5463. INT 15 - DESQview 2.26 - CONTROL 386 SCREEN VIRTUALIZATION
  5464.     AX = DE21h
  5465.     BX = 0000h turn off
  5466.          nonzero turn on
  5467. Return: BX = old state of virtualization
  5468. ---------------------------------------------
  5469. INT 15 - DESQview 2.26 - GET TASK MEMORY STATUS
  5470.     AX = DE22h
  5471.     DX = segment of task handle
  5472. Return: DX = total amount of memory in paragraphs
  5473.     BX = amount of system memory in paragraphs
  5474.     CX = largest block of system memory available in paragraphs
  5475.     AX = flags
  5476.         bit 0: system memory resides in shared memory
  5477.             1: process's memory is swapped out
  5478.             2: system memory is swapped out
  5479. ---------------------------------------------
  5480. INT 16 - KEYBOARD - READ CHAR FROM BUFFER, WAIT IF EMPTY
  5481.     AH = 00h
  5482. Return: AH = scan code
  5483.     AL = character
  5484. Note:    on extended keyboards, this function discards any extended keystrokes,
  5485.       returning only when a non-extended keystroke is available
  5486. SeeAlso: AH=01h,10h
  5487. ---------------------------------------------
  5488. INT 16 - KEYBOARD - CHECK BUFFER, DO NOT CLEAR
  5489.     AH = 01h
  5490. Return: ZF clear if character in buffer
  5491.         AH = scan code
  5492.         AL = character
  5493.     ZF set if no character in buffer
  5494. SeeAlso: AH=00h,11h
  5495. ---------------------------------------------
  5496. INT 16 - KEYBOARD - GET SHIFT STATUS
  5497.     AH = 02h
  5498.     AL = shift status bits
  5499.         0 = right shift key depressed
  5500.         1 = left shift key depressed
  5501.         2 = CTRL depressed
  5502.         3 = ALT depressed
  5503.         4 = SCROLL LOCK active
  5504.         5 = NUM LOCK active
  5505.         6 = CAPS LOCK active
  5506.         7 = INSERT state active
  5507. SeeAlso: AH=12h
  5508. ---------------------------------------------
  5509. INT 16 - KEYBOARD - SET DELAYS (Jr,AT model 339,XT286,PS)
  5510.     AH = 03h
  5511.     AL = subfunction
  5512.         00h reset typematic (PCjr)
  5513.         01h increase initial delay (PCjr)
  5514.         02h increase continuing delay (PCjr)
  5515.         03h increase both delays (PCjr)
  5516.         04h turn off typematic (PCjr)
  5517.         05h Set typematic rate (AT or PS/2)
  5518.     BH = 00h - 03h for delays of 250ms, 500ms, 750ms, or 1s
  5519.     BL = 00h - 1Fh for typematic rates of 30cps down to 2cps
  5520. ---------------------------------------------
  5521. INT 16 - KEYBOARD - KEYCLICK (Jr,CONV)
  5522.     AH = 04h
  5523.     AL = 00h click off
  5524.          01h click on
  5525. ---------------------------------------------
  5526. INT 16 - KEYBOARD - WRITE TO KEYBOARD BUFFER (AT model 339,XT2,XT286,PS)
  5527.     AH = 05h
  5528.     CH = scan code
  5529.     CL = character
  5530. Return: AL = 01h if buffer full
  5531. SeeAlso: AH=71h, INT 15/AX=DE10h
  5532. ---------------------------------------------
  5533. INT 16 - KEYBOARD - GET ENHANCED KEYSTROKE (AT model 339,XT2,XT286,PS)
  5534.     AH = 10h
  5535. Return: AH = scan code
  5536.     AL = character
  5537. Note:    unlike AH=00h, this function does not discard extended keystrokes
  5538. SeeAlso: AH=00h,11h
  5539. ---------------------------------------------
  5540. INT 16 - KEYBOARD - CHECK ENHANCED KEYSTROKE (AT model 339,XT2,XT286,PS)
  5541.     AH = 11h
  5542. Return: ZF clear if keystroke available
  5543.         AH = scan code \ meaningless if ZF = 1
  5544.         AL = character /
  5545.     ZF set if kbd buffer empty
  5546. SeeAlso: AH=01h,10h
  5547. ---------------------------------------------
  5548. INT 16 - KEYBOARD - GET ENHANCED SHIFT FLAGS (AT model 339,XT2,XT286,PS)
  5549.     AH = 12h
  5550. Return: AL = shift flags (same as for AH=02h)
  5551.        bit 7: Ins ON
  5552.        bit 6: CapsLock ON
  5553.        bit 5: NumLock ON
  5554.        bit 4: ScrollLock ON
  5555.        bit 3: Either ALT key down
  5556.        bit 2: Either CTRL key down
  5557.        bit 1: Left shift key down
  5558.        bit 0: Right shift key down
  5559.     AH
  5560.        bit 7: SysReq key down
  5561.        bit 6: CapsLock key down
  5562.        bit 5: NumLock key down
  5563.        bit 4: ScrollLock key down
  5564.        bit 3: Right Alt key down
  5565.        bit 2: Right Ctrl key down
  5566.        bit 1: Left Alt key down
  5567.        bit 0: Left Ctrl key down
  5568. Notes:    AL bit 3 set only for left Alt key on many machines
  5569.     AH bits 7 through 4 always clear on a Compaq SLT/286
  5570. SeeAlso: AH=02h
  5571. ---------------------------------------------
  5572. INT 16 - Microsoft Word internal - MICROSOFT WORD COOPERATION WITH TSR
  5573.     AX = 5500h
  5574. Return: AX = 4D53h if keyboard TSR present
  5575. Notes:    during startup, Microsoft Word tries to communicate with any TSRs
  5576.       that are present through this call.
  5577.     If the return is not 4D53h, Word installs its own INT 9h and INT 16h
  5578.       handlers, otherwise it assumes that the TSR will handle the keyboard.
  5579. ---------------------------------------------
  5580. INT 16 - PC Tools v5.1 BACKTALK - UNHOOK
  5581.     AX = 6969h
  5582.     BX = 6968h
  5583. Return: resident code unhooked, but not removed from memory
  5584. ---------------------------------------------
  5585. INT 16 - PC Tools v5.1 BACKTALK - INSTALLATION CHECK
  5586.     AX = 6969h
  5587.     BX = 6969h
  5588.     DX = 0000h
  5589. Return: DX nonzero if installed
  5590.         BX = CS of resident code
  5591.         DX = PSP segment of resident code
  5592.         DS:SI -> ASCIZ identification string "CPoint Talk"
  5593. ---------------------------------------------
  5594. INT 16 - MS Windows - ???
  5595.     AH = 6Fh
  5596.     ???
  5597. Return: ???
  5598. ---------------------------------------------
  5599. INT 16 - FAKEY.COM - INSTALLATION CHECK
  5600.     AH = 70h
  5601. Return: AX = 1954h if installed
  5602. Note:    FAKEY is a keystroke faking utility by System Enhancement Associates
  5603. ---------------------------------------------
  5604. INT 16 - FAKEY.COM - PUSH KEYSTROKES
  5605.     AH = 71h
  5606.     CX = number of keystrokes
  5607.     DS:SI -> array of words containing keystrokes to be returned by AH=00h
  5608. Note:    FAKEY is a keystroke faking utility by System Enhancement Associates
  5609. SeeAlso: AH=05h,72h
  5610. ---------------------------------------------
  5611. INT 16 - FAKEY.COM - CLEAR FAKED KEYSTROKES
  5612.     AH = 72h
  5613. Note:    FAKEY is a keystroke faking utility by System Enhancement Associates
  5614. SeeAlso: AH=71h
  5615. ---------------------------------------------
  5616. INT 16 - FAKEY.COM - PLAY TONES
  5617.     AH = 73h
  5618.     CX = number of tones to play
  5619.     DS:SI -> array of tones (see below)
  5620. Note:    FAKEY is a keystroke faking utility by System Enhancement Associates
  5621.  
  5622. Format of tone array entries:
  5623. Offset    Size    Description
  5624.  00h    WORD    divisor for timer channel 2
  5625.  02h    WORD    duration in clock ticks
  5626. ---------------------------------------------
  5627. INT 16 - pcANYWHERE - SET TICK COUNT FOR SCANNING
  5628.     AH = 75h
  5629.     AL = number of ticks between checks for new screen changes
  5630. ---------------------------------------------
  5631. INT 16 - pcANYWHERE - SET ERROR CHECKING TYPE
  5632.     AH = 76h
  5633.     AL = error checking type
  5634.         00h none
  5635.         01h fast
  5636.         02h slow
  5637. ---------------------------------------------
  5638. INT 16 - pcANYWHERE - LOG OFF
  5639.     AH = 77h
  5640.     AL = mode
  5641.         00h wait for another call
  5642.         01h leave in Memory Resident Mode
  5643.         02h leave in Automatic Mode
  5644.         FFh leave in current operating mode
  5645. ---------------------------------------------
  5646. INT 16 - WATCH.COM - INSTALLATION CHECK
  5647.     AX = 7761h ('wa')
  5648. Return: AX = 5741h ('WA') if installed
  5649. Note:    WATCH.COM is part of the "TSR" package by Kim Kokkonen
  5650. ---------------------------------------------
  5651. INT 16 - PC Magazine PUSHDIR.COM - INSTALLATION CHECK
  5652.     AX = 7788h
  5653.     BX = 7789h
  5654. Return: AX = 7789h
  5655.     BX = 7788h
  5656.     DS:SI -> signature string
  5657. ---------------------------------------------
  5658. INT 16 - pcANYWHERE - CHECK STATUS
  5659.     AH = 79h
  5660. Return: AX = status
  5661.         FFFFh if resident and active
  5662.         FFFEh if resident but not active
  5663.         FFFDh if in Memory Resident mode
  5664.         FFFCh if in Automatic mode
  5665.         other value if not resident
  5666. ---------------------------------------------
  5667. INT 16 - pcANYWHERE - CANCEL SESSION
  5668.     AH = 7Ah
  5669. ---------------------------------------------
  5670. INT 16 - pcANYWHERE - SUSPEND
  5671.     AX = 7B00h
  5672. SeeAlso: AX=7B01h
  5673. ---------------------------------------------
  5674. INT 16 - pcANYWHERE - RESUME
  5675.     AX = 7B01h
  5676. SeeAlso: AX=7B00h
  5677. ---------------------------------------------
  5678. INT 16 - pcANYWHERE - GET PORT CONFIGURATION
  5679.     AH = 7Ch
  5680. Return: AH = port number
  5681.     AL = baud rate
  5682.         00h = 50 baud
  5683.         01h = 75 baud
  5684.         02h = 110 baud
  5685.         03h = 134.5 baud
  5686.         04h = 150 baud
  5687.         05h = 300 baud
  5688.         06h = 600 baud
  5689.         07h = 1200 baud
  5690.         08h = 1800 baud
  5691.         09h = 2000 baud
  5692.         0Ah = 2400 baud
  5693.         0Bh = 4800 baud
  5694.         0Ch = 7200 baud
  5695.         0Dh = 9600 baud
  5696.         0Eh = 19200 baud
  5697. ---------------------------------------------
  5698. INT 16 - pcANYWHERE - GET/SET TERMINAL PARAMETERS
  5699.     AH = 7Dh
  5700.     AL = subfunction
  5701.         00h set terminal parameters
  5702.         01h get terminal parameters
  5703.         02h get configuration header and terminal parameters
  5704.     DS:CX -> terminal parameter block
  5705. ---------------------------------------------
  5706. INT 16 - pcANYWHERE - COMMUNICATIONS I/O THROUGH PORT
  5707.     AH = 7Eh
  5708.     AL = subfunction
  5709.         01h port input status
  5710.         Return AX = 0 if no characer ready,
  5711.                AX = 1 if character ready
  5712.         02h port input character
  5713.         Return AL = received character
  5714.         03h port output character in CX
  5715.         11h hang up phone
  5716. ---------------------------------------------
  5717. INT 16 - pcANYWHERE - SET KEYBOARD/SCREEN MODE
  5718.     AH = 7Fh
  5719.     AL = subfunction
  5720.         00h enable remote keyboard only
  5721.         01h enable host keyboard only
  5722.         02h enable both keyboards
  5723.         08h display top 24 lines
  5724.         09h display bottom 24 lines
  5725.         10h Hayes modem
  5726.         11h other modem
  5727.         12h direct connect
  5728. ---------------------------------------------
  5729. INT 16 - MAKEY.COM - INSTALLATION CHECK
  5730.     AH = 80h
  5731. Return: AX = 1954h if installed
  5732. Note:    MAKEY is a utility by System Enhancement Associates
  5733. ---------------------------------------------
  5734. INT 16 - PTxxx.COM - (xxx=CGA,EGA,VGA,HER...) CALL GATE FOR GRAPHICS
  5735.     AH = AAh
  5736.     Various registers set up by high level language.
  5737. Return: Graphics performed
  5738. Note:    PT stands for Paint Tools which is a graphics library for Turbo Pascal,
  5739.       Modula 2 and others from DataBiten in Sweden. The library is
  5740.       installed as a memory resident driver.
  5741. ---------------------------------------------
  5742. INT 16 - Compaq 386 - SET CPU SPEED
  5743.     AH = F0h
  5744.     AL = speed
  5745.         00h equivalent to 6 MHz 80286 (COMMON)
  5746.         01h equivalent to 8 MHz 80286 (FAST)
  5747.         02h full 16 MHz (HIGH)
  5748.         03h toggles between 8 MHz-equivalent and speed set by system board
  5749.         switch (AUTO or HIGH)
  5750.         08h full 16 MHz except 8 MHz-equivalent during floppy disk access
  5751.         09h specify speed directly
  5752.         CX = speed value, 1 (slowest) to 50 (full), 3 ~= 8088
  5753. SeeAlso: AH=F1h
  5754. ---------------------------------------------
  5755. INT 16 - PE.EXE - INSTALLATION CHECK
  5756.     AX = F0F0h
  5757. Return: AX = 0F0Fh if installed
  5758.         ES:DI -> data block
  5759. Note:    PE is a TSR screen grabber included with ASMED, an integrated
  5760.       environment for TASM and MASM
  5761.  
  5762. Format of data block:
  5763. Offset    Size    Description
  5764.  00h    DWORD    pointer to program tag (counted ASCII string)
  5765.  04h    WORD    ???
  5766.  06h    DWORD    pointer to ???
  5767.  0Ah  4 BYTEs    ???
  5768.  0Eh    DWORD    ???
  5769.     more???
  5770. ---------------------------------------------
  5771. INT 16 - Compaq 386 - READ CURRENT CPU SPEED
  5772.     AH = F1h
  5773. Return:    AL = speed code (see AH=F0h)
  5774.          if AL = 09h, CX = speed code
  5775. SeeAlso: AH=F0h
  5776. ---------------------------------------------
  5777. INT 16 - Compaq 386 - DETERMINE ATTACHED KEYBOARD TYPE
  5778.     AH = F2h
  5779. Return: AL = type
  5780.         00h if 11-bit AT keyboard is in use
  5781.         01h if 9-bit PC keyboard is in use 
  5782. ---------------------------------------------
  5783. INT 16 - PC Tools v6.0 DESKTOP API - ???
  5784.     AX = FFADh
  5785.     ???
  5786. Return: ???
  5787. ---------------------------------------------
  5788. INT 16 - PC Tools v6.0 DESKTOP API - ???
  5789.     AX = FFAEh
  5790.     ???
  5791. Return: ???
  5792. ---------------------------------------------
  5793. INT 16 - PC Tools v6.0 DESKTOP API - ???
  5794.     AX = FFAFh
  5795.     ???
  5796. Return: ???
  5797. ---------------------------------------------
  5798. INT 16 - PC Tools v6.0 DESKTOP API - ???
  5799.     AX = FFB0h
  5800.     ???
  5801. Return: ???
  5802. ---------------------------------------------
  5803. INT 16 - PC Tools v6.0 DESKTOP API - ???
  5804.     AX = FFB1h
  5805.     ???
  5806. Return: ???
  5807. ---------------------------------------------
  5808. INT 16 - PC Tools v5.5 DESKTOP API - ???
  5809.     AX = FFB2h
  5810. Return: DS:SI -> ???
  5811. ---------------------------------------------
  5812. INT 16 - PC Tools v5.5 DESKTOP API - ???
  5813.     AX = FFB3h
  5814.     ???
  5815. Return: ???
  5816. Note:    available only when popped up
  5817. ---------------------------------------------
  5818. INT 16 - PC Tools v5.5 DESKTOP API - ???
  5819.     AX = FFB4h
  5820.     ???
  5821. Return: ???
  5822. Note:    available only when popped up
  5823. ---------------------------------------------
  5824. INT 16 - PC Tools v5.5 DESKTOP API - GET/SET ???
  5825.     AX = FFB5h
  5826.     BX = ??? (000Fh to 0019h)
  5827.     DX = 0000h get, nonzero = set
  5828.     ES:DI -> 16-byte buffer with new values or to receive old values
  5829. ---------------------------------------------
  5830. INT 16 - PC Tools v5.5 DESKTOP API - ???
  5831.     AX = FFB6h
  5832.     ???
  5833. Return: AH = ???
  5834.     AL = ???
  5835. ---------------------------------------------
  5836. INT 16 - PC Tools v5.5 DESKTOP API - SET ???
  5837.     AX = FFB7h
  5838.     DS:SI -> 10-byte buffer with ???
  5839.     ???
  5840. Return: ???
  5841. ---------------------------------------------
  5842. INT 16 - PC Tools v5.1 DESKTOP API - ???
  5843.     AX = FFB8h
  5844.     BH = subfunction
  5845.         00h get
  5846.         Return: BL = old value of ???
  5847.         nonzero set
  5848.         BL = new value for ???
  5849. ---------------------------------------------
  5850. INT 16 - PC Tools v5.1 DESKTOP API - ???
  5851.     AX = FFB9h
  5852.     ???
  5853. Return: AX = ???
  5854.     CX = ???
  5855.     DS:SI -> ???
  5856.     ES:DI -> ???
  5857. ---------------------------------------------
  5858. INT 16 - PC Tools v5.1 DESKTOP API - ???
  5859.     AX = FFBAh
  5860.     ???
  5861. Return: ???
  5862. Note:    available only when popped up
  5863. ---------------------------------------------
  5864. INT 16 - PC Tools v5.1 DESKTOP API - ???
  5865.     AX = FFBBh
  5866.     ???
  5867. Return: ???
  5868. Note:    available only when popped up
  5869. ---------------------------------------------
  5870. INT 16 - PC Tools v5.1 DESKTOP API - RESTORE ORIGINAL SCREEN???
  5871.     AX = FFBCh
  5872. ---------------------------------------------
  5873. INT 16 - PC Tools v5.1 DESKTOP API - POP DOWN???
  5874.     AX = FFBDh
  5875.     ???
  5876. Return: ???
  5877. ---------------------------------------------
  5878. INT 16 - PC Tools v5.1 DESKTOP API - ???
  5879.     AX = FFBEh
  5880.     ???
  5881. Return: ???
  5882. Note:    available only when popped up
  5883. ---------------------------------------------
  5884. INT 16 - PC Tools v5.1 DESKTOP API - ???
  5885.     AX = FFBFh
  5886.     ???
  5887. Return: ???
  5888. Note:    available only when popped up
  5889. ---------------------------------------------
  5890. INT 16 - PC Tools v5.1 DESKTOP API - ???
  5891.     AX = FFC0h
  5892.     ???
  5893. Return: ???
  5894. Note:    available only when popped up
  5895. ---------------------------------------------
  5896. INT 16 - PC Tools v5.1 DESKTOP API - ???
  5897.     AX = FFC1h
  5898.     ???
  5899. Return: ???
  5900. Note:    available only when popped up
  5901. ---------------------------------------------
  5902. INT 16 - PC Tools v5.1 DESKTOP API - ???
  5903.     AX = FFC2h
  5904.     ???
  5905. Return: ???
  5906. Note:    available only when popped up
  5907. ---------------------------------------------
  5908. INT 16 - PC Tools v5.1 DESKTOP API - ???
  5909.     AX = FFC3h
  5910.     ???
  5911. Return: ???
  5912. Note:    available only when popped up
  5913. ---------------------------------------------
  5914. INT 16 - PC Tools v5.1 DESKTOP API - ???
  5915.     AX = FFC4h
  5916.     ???
  5917. Return: ???
  5918. Note:    available only when popped up
  5919. ---------------------------------------------
  5920. INT 16 - PC Tools v5.1 DESKTOP API - CHECK WHETHER DESKTOP LOADED RESIDENT
  5921.     AX = FFC5h
  5922. Return: BL = nonzero if loaded resident
  5923.        = 00h if nonresident
  5924. Note:    available only when popped up
  5925. ---------------------------------------------
  5926. INT 16 - PC Tools v5.1 DESKTOP API - SET ???
  5927.     AX = FFC6h
  5928.     BL = new value for ???
  5929. ---------------------------------------------
  5930. INT 16 - PC Tools v5.1 DESKTOP API - ???
  5931.     AX = FFC7h
  5932.     ???
  5933. Return: ???
  5934. Note:    screen swapping???
  5935. ---------------------------------------------
  5936. INT 16 - PC Tools v5.1 DESKTOP API - GET ???
  5937.     AX = FFC8h
  5938. Return: DS:SI -> ???
  5939. ---------------------------------------------
  5940. INT 16 - PC Tools v5.1 DESKTOP API - ???
  5941.     AX = FFC9h
  5942.     SI = ???
  5943.     CX = ???
  5944. Return: ???
  5945. Note:    available only when popped up
  5946. ---------------------------------------------
  5947. INT 16 - PC Tools v5.1 DESKTOP API - ???
  5948.     AX = FFCAh
  5949.     DX = ???
  5950. Return: ???
  5951. Note:    available only when popped up
  5952. ---------------------------------------------
  5953. INT 16 - PC Tools v5.1 DESKTOP API - ???
  5954.     AX = FFCBh
  5955.     DX = ???
  5956. Return: ???
  5957. Note:    available only when popped up
  5958. ---------------------------------------------
  5959. INT 16 - PC Tools v5.1 DESKTOP API - DISPLAY ASCIZ STRING
  5960.     AX = FFCCh
  5961.     DS:SI -> ASCIZ string
  5962. Return: AX = ???
  5963.     CX = ???
  5964.     ES:DI -> address past last character displayed
  5965. ---------------------------------------------
  5966. INT 16 - PC Tools v5.1 DESKTOP API - ???
  5967.     AX = FFCDh
  5968.     DS:DX -> ???
  5969. Return: ???
  5970. Note:    available only when popped up
  5971. ---------------------------------------------
  5972. INT 16 - PC Tools v5.1 DESKTOP API - SET ??? DELAYS
  5973.     AX = FFCEh
  5974.     CX = ???
  5975. Return: nothing???
  5976. ---------------------------------------------
  5977. INT 16 - PC Tools v5.1 DESKTOP API - ???
  5978.     AX = FFCFh
  5979.     ???
  5980. Return: ???
  5981. Note:    available only when popped up
  5982. ---------------------------------------------
  5983. INT 16 - PC Tools v5.1 DESKTOP API - ???
  5984.     AX = FFD0h
  5985.     ???
  5986. Return: ???
  5987. Note:    available only when popped up
  5988. ---------------------------------------------
  5989. INT 16 - PC Tools v5.1 DESKTOP API - ???
  5990.     AX = FFD1h
  5991.     ???
  5992. Return: ???
  5993. Note:    available only when popped up
  5994. ---------------------------------------------
  5995. INT 16 - PC Tools v5.1 DESKTOP API - ???
  5996.     AX = FFD2h
  5997.     BX = ???
  5998. Return: ???
  5999. Note:    available only when popped up
  6000. ---------------------------------------------
  6001. INT 16 - PC Tools v5.1 DESKTOP API - ???
  6002.     AX = FFD3h
  6003.     ???
  6004. Return: ???
  6005. ---------------------------------------------
  6006. INT 16 - PC Tools v5.1 DESKTOP API - CREATE/OPEN/DELETE FILE
  6007.     AX = FFD4h
  6008.     BH = 3Ch create file
  6009.         CX = file attributes
  6010.          3Dh open file
  6011.          41h delete file
  6012.     BL = access mode
  6013.          00h read only
  6014.          01h write only
  6015.          02h read/write
  6016.     DS:SI -> ASCIZ filename
  6017. Return: BX = file handle
  6018.         0000h on error
  6019. ---------------------------------------------
  6020. INT 16 - PC Tools v5.1 DESKTOP API - ???
  6021.     AX = FFD5h
  6022.     ???
  6023. Return: ???
  6024. Note:    available only when popped up
  6025. ---------------------------------------------
  6026. INT 16 - PC Tools v5.1 DESKTOP API - ???
  6027.     AX = FFD6h
  6028.     ???
  6029. Return: ???
  6030. Note:    available only when popped up
  6031. ---------------------------------------------
  6032. INT 16 - PC Tools v5.1 DESKTOP API - ???
  6033.     AX = FFD7h
  6034.     ???
  6035. Return: ???
  6036. Note:    available only when popped up
  6037. ---------------------------------------------
  6038. INT 16 - PC Tools v5.1 DESKTOP API - SAFE CREATE FILE
  6039.     AX = FFD8h
  6040.     DS:BX -> ASCIZ filename
  6041. Return: BX = file handle
  6042.         0000h on error
  6043. Note:    pops up confirmation menu if file already exists
  6044.     only available when popped up???
  6045. ---------------------------------------------
  6046. INT 16 - PC Tools v5.1 DESKTOP API - ???
  6047.     AX = FFD9h
  6048.     ???
  6049. Return: ???
  6050. Note:    available only when popped up
  6051. ---------------------------------------------
  6052. INT 16 - PC Tools v5.1 DESKTOP API - ???
  6053.     AX = FFDAh
  6054.     DS:SI -> ???
  6055. Return: DS:SI -> ???
  6056. ---------------------------------------------
  6057. INT 16 - PC Tools v5.1 DESKTOP API - ???
  6058.     AX = FFDBh
  6059.     ???
  6060. Return: ???
  6061. Note:    available only when popped up
  6062. ---------------------------------------------
  6063. INT 16 - PC Tools v5.1 DESKTOP API - UNHOOK
  6064.     AX = FFDCh
  6065. Return: interrupt vectors 09h, 16h, 1Ch, and 21h restored to original values
  6066. ---------------------------------------------
  6067. INT 16 - PC Tools v5.1 PCShell API - INSTALLATION CHECK
  6068.     AX = FFDDh
  6069.     BX = 0000h
  6070. Return: CX = 5555h 
  6071.     DX = 5555h if PCShell installed in resident mode
  6072. ---------------------------------------------
  6073. INT 16 - PC Tools v5.1 PCShell API - REQUEST POP-UP
  6074.     AX = FFDDh
  6075.     BX = 0001h
  6076. ---------------------------------------------
  6077. INT 16 - PC Tools v5.1 PCShell API - GET ???
  6078.     AX = FFDDh
  6079.     BX = 0002h
  6080. Return: AL = 
  6081.         00h ???
  6082.         01h ???
  6083. ---------------------------------------------
  6084. INT 16 - PC Tools v5.1 PCShell API - REQUEST POP-UP
  6085.     AX = FFDDh
  6086.     BX = 0003h
  6087. ---------------------------------------------
  6088. INT 16 - PC Tools v5.1 PCShell API - ???
  6089.     AX = FFDDh
  6090.     BX = 0004h
  6091.     ???
  6092. Return: DS:SI -> ???
  6093. ---------------------------------------------
  6094. INT 16 - PC Tools v5.1 PCShell API - ???
  6095.     AX = FFDDh
  6096.     BX = 0005h
  6097.     ???
  6098. Return: ???
  6099. ---------------------------------------------
  6100. INT 16 - PC Tools v5.1 PCShell API - ???
  6101.     AX = FFDDh
  6102.     BX = 0006h
  6103.     ???
  6104. Return: ???
  6105. ---------------------------------------------
  6106. INT 16 - PC Tools v5.1 PCShell API - ???
  6107.     AX = FFDDh
  6108.     BX = 0007h
  6109.     ???
  6110. Return: ???
  6111. ---------------------------------------------
  6112. INT 16 - PC Tools v5.1 PCShell API - ???
  6113.     AX = FFDDh
  6114.     BX = 0008h
  6115.     ???
  6116. Return: ???
  6117. ---------------------------------------------
  6118. INT 16 - PC Tools v6.0 PCShell API - GET ???
  6119.     AX = FFDDh
  6120.     BX = 0009h
  6121. Return: DS:SI -> ???
  6122. ---------------------------------------------
  6123. INT 16 - PC Tools v5.1 DESKTOP API - ???
  6124.     AX = FFDEh
  6125.     DS:DX -> ???
  6126. Return: ???
  6127. Note:    available only when popped up
  6128. ---------------------------------------------
  6129. INT 16 - PC Tools v5.1 DESKTOP API - ???
  6130.     AX = FFDFh
  6131.     ???
  6132. Return: ???
  6133. ---------------------------------------------
  6134. INT 16 - PC Tools v5.1 DESKTOP API - ???
  6135.     AX = FFE0h
  6136.     CX = ???
  6137.     DX = ???
  6138. Return: ???
  6139. ---------------------------------------------
  6140. INT 16 - PC Tools v5.1 DESKTOP API - BEEP
  6141.     AX = FFE1h
  6142. ---------------------------------------------
  6143. INT 16 - PC Tools v5.1 DESKTOP API - ???
  6144.     AX = FFE2h
  6145.     DX = ???
  6146. Return: ???
  6147. Note:    available only when popped up
  6148. ---------------------------------------------
  6149. INT 16 - PC Tools v5.1 DESKTOP API - ???
  6150.     AX = FFE3h
  6151.     BL = ???
  6152. Return: ???
  6153. ---------------------------------------------
  6154. INT 16 - PC Tools v5.1 DESKTOP API - ???
  6155.     AX = FFE4h
  6156.     DX = segment of ???
  6157. Return: ???
  6158. Note:    available only when popped up
  6159. ---------------------------------------------
  6160. INT 16 - PC Tools v5.1 DESKTOP API - ???
  6161.     AX = FFE5h
  6162.     DS:SI -> wildcard filename???
  6163.     DX = ???
  6164. Return: AX = ???
  6165. Note:    available only when popped up
  6166. ---------------------------------------------
  6167. INT 16 - PC Tools v5.1 DESKTOP API - ???
  6168.     AX = FFE6h
  6169.     DS:SI -> ???
  6170. Return: AX = ???
  6171. ---------------------------------------------
  6172. INT 16 - PC Tools v5.1 DESKTOP API - ???
  6173.     AX = FFE7h
  6174.     BX = segment of ???
  6175. Return: ???
  6176. Note:    available only when popped up
  6177. ---------------------------------------------
  6178. INT 16 - PC Tools v5.1 DESKTOP API - DISPLAY NUMBER
  6179.     AX = FFE8h
  6180.     CX = number
  6181.     DH = attribute
  6182.     DS:SI -> destination for ASCII number
  6183. Return: DS:SI buffer filled in with alternating characters and attributes
  6184. ---------------------------------------------
  6185. INT 16 - PC Tools v5.1 DESKTOP API - ???
  6186.     AX = FFE9h
  6187.     ???
  6188. Return: ???
  6189. Note:    available only when popped up
  6190. ---------------------------------------------
  6191. INT 16 - PC Tools v5.1 DESKTOP API - DISPLAY COUNTED STRING
  6192.     AX = FFEAh
  6193.     DS:SI -> counted string (count byte followed by string)
  6194. Return: ???
  6195. Note:    available only when popped up
  6196. ---------------------------------------------
  6197. INT 16 - PC Tools v5.1 DESKTOP API - ???
  6198.     AX = FFEBh
  6199.     ???
  6200. Return: ???
  6201. ---------------------------------------------
  6202. INT 16 - PC Tools v5.1 DESKTOP API - ???
  6203.     AX = FFECh
  6204.     DS:SI -> FAR routine to ???
  6205.     BX = ???
  6206. Return: AX = ???
  6207. ---------------------------------------------
  6208. INT 16 - PC Tools v5.1 DESKTOP API - ???
  6209.     AX = FFEDh
  6210. Return: AX = ???
  6211. ---------------------------------------------
  6212. INT 16 - PC Tools v5.1 DESKTOP API - ???
  6213.     AX = FFEEh
  6214.     SI = ???
  6215. Return: ???
  6216. Note:    available only when popped up
  6217. ---------------------------------------------
  6218. INT 16 - PC Tools v5.1 DESKTOP API - INSTALLATION CHECK
  6219.     AX = FFEFh
  6220.     CX = 0000h
  6221. Return: CX = ABCDh if PC Tools DESKTOP.EXE installed
  6222.         BX = segment of resident portion
  6223.         AX = ???
  6224. ---------------------------------------------
  6225. INT 16 - PC Tools v5.1 DESKTOP API - ???
  6226.     AX = FFF0h
  6227.     DX = ???
  6228. Return: ???
  6229. Note:    available only when popped up
  6230. ---------------------------------------------
  6231. INT 16 - PC Tools v5.1 DESKTOP API - ALTERNATE INSTALLATION CHECK
  6232.     AX = FFF1h
  6233.     BX = 0000h  leave ??? flag as is
  6234.         nonzero set ??? flag
  6235. Return: CX = 5555h if installed
  6236.     DX = 5555h
  6237. ---------------------------------------------
  6238. INT 16 - PC Tools v5.1 DESKTOP API - ???
  6239.     AX = FFF2h
  6240.     ???
  6241. Return: ???
  6242. Note:    available only when popped up
  6243. ---------------------------------------------
  6244. INT 16 - PC Tools v5.1 DESKTOP API - ???
  6245.     AX = FFF3h
  6246.     ???
  6247. Return: ???
  6248. ---------------------------------------------
  6249. INT 16 - PC Tools v5.1 DESKTOP API - ???
  6250.     AX = FFF4h
  6251.     ???
  6252. Return: ???
  6253. Note:    available only when popped up
  6254. ---------------------------------------------
  6255. INT 16 - PC Tools v5.1 DESKTOP API - GET SCREEN ATTRIBUTE ARRAY
  6256.     AX = FFF5h
  6257. Return: ES:BX -> array of screen attributes 
  6258.         00h    BYTE  normal characters on desktop menu
  6259.         01h    BYTE  highlighted characters on desktop menu
  6260.         02h    BYTE 
  6261.         03h    BYTE
  6262.         etc.
  6263. ---------------------------------------------
  6264. INT 16 - PC Tools v5.1 DESKTOP API - ???
  6265.     AX = FFF6h
  6266.     DS = ???
  6267.     BX = ???
  6268.     DX = ???
  6269. Return: ???
  6270. Note:    available only when popped up
  6271. ---------------------------------------------
  6272. INT 16 - PC Tools v5.1 DESKTOP API - ???
  6273.     AX = FFF7h
  6274.     SI = ???
  6275. Return: ???
  6276. ---------------------------------------------
  6277. INT 16 - PC Tools v5.1 DESKTOP API - ???
  6278.     AX = FFF8h
  6279.     DS:SI -> ???
  6280.     BX = ???
  6281. Return: ???
  6282. ---------------------------------------------
  6283. INT 16 - PC Tools v5.1 DESKTOP API - ???
  6284.     AX = FFF9h
  6285.     ES:BX -> FAR routine to ???
  6286. Return: ???
  6287. Note:    available only when popped up
  6288. ---------------------------------------------
  6289. INT 16 - PC Tools v5.1 DESKTOP API - ???
  6290.     AX = FFFAh
  6291. Return: ???
  6292. ---------------------------------------------
  6293. INT 16 - PC Tools v5.1 DESKTOP API - ???
  6294.     AX = FFFBh
  6295. Return: ???
  6296. ---------------------------------------------
  6297. INT 16 - PC Tools v5.1 DESKTOP API - GET ???
  6298.     AX = FFFCh
  6299. Return: ES:BX = ???
  6300.     DS:DX = original INT 9 vector
  6301. ---------------------------------------------
  6302. INT 16 - PC Tools v5.1 DESKTOP API - ???
  6303.     AX = FFFDh
  6304.     ???
  6305. Return: ???
  6306. ---------------------------------------------
  6307. INT 16 - PC Tools v5.1 DESKTOP API - SHOW MOUSE CURSOR
  6308.     AX = FFFEh
  6309. ---------------------------------------------
  6310. INT 16 - PC Tools v5.1 DESKTOP API - HIDE MOUSE CURSOR
  6311.     AX = FFFFh
  6312. ---------------------------------------------
  6313. INT 17 - PRINTER - OUTPUT CHARACTER
  6314.     AH = 00h
  6315.     AL = character
  6316.     DX = printer port (0-3)
  6317. Return: AH = status bits
  6318.         0 = time out
  6319.         1 = unused
  6320.         2 = unused
  6321.         3 = I/O error
  6322.         4 = selected
  6323.         5 = out of paper
  6324.         6 = acknowledge
  6325.         7 = not busy
  6326. ---------------------------------------------
  6327. INT 17 - PRINTER - INITIALIZE
  6328.     AH = 01h
  6329.     DX = printer port (0-3)
  6330. Return: AH = status (see AH=00h)
  6331. ---------------------------------------------
  6332. INT 17 - PRINTER - GET STATUS
  6333.     AH = 02h
  6334.     DX = printer port (0-3)
  6335. Return: AH = status (see AH=00h)
  6336. ---------------------------------------------
  6337. INT 17 - INSET - INSTALLATION CHECK
  6338.     AH = 02h
  6339.     DX = 0000h
  6340.     CX = 07C3h (1987d)
  6341. Return: CX = 07C2h (1986d) if installed
  6342. Note:    INSET is a text/graphics integration program
  6343. ---------------------------------------------
  6344. INT 17 - FLASHUP.COM - INSTALLATION CHECK
  6345.     AH = 60h
  6346. Return: AL = 60h
  6347.     DX = CS of resident code
  6348. Note:    FLASHUP.COM is part of Flash-Up Windows by The Software Bottling Co.
  6349.     FLASHUP also hooks INT 10 and received commands via INT 10/AH=09h,0Ah
  6350.       consisting of an 80h followed by the actual command
  6351. ---------------------------------------------
  6352. INT 17 - SPEEDSCR.COM - INSTALLATION CHECK
  6353.     AH = 61h
  6354. Return: AL = 61h
  6355.     DX = CS of resident code
  6356. Note:    SPEEDSCR.COM is by The Software Bottling Co.
  6357. ---------------------------------------------
  6358. INT 17 - INSET - EXECUTE COMMAND STRING
  6359.     AX = CD00h
  6360.     DS:DX -> ASCIZ command string (max 80 bytes)
  6361. Return: CX = 07C2h (1986d)
  6362. Note:    user interface menus pop up after last command, unless that command
  6363.     exits INSET
  6364. ---------------------------------------------
  6365. INT 17 - INSET - GET IMAGE SIZE
  6366.     AX = CD01h
  6367.     DS:DX -> ASCIZ name of image file
  6368. Return: AX = height in 1/720th inch
  6369.     BX = width in 1/720th inch
  6370.     CX = 07C2h (1986d)
  6371. ---------------------------------------------
  6372. INT 17 - INSET - INITIALIZE
  6373.     AX = CD02h
  6374. Return: CX = 07C2h (1986d)
  6375. Note:    all open files are closed and the printer is reset
  6376. ---------------------------------------------
  6377. INT 17 - INSET - EXECUTE INSET MENU WITHIN OVERRIDE MODE
  6378.     AX = CD03h
  6379. Return: CX = 07C2h (1986d)
  6380. ---------------------------------------------
  6381. INT 17 - INSET - INITIALIZE LINKED MODE
  6382.     AX = CD04h
  6383.     ES:DI -> FAR routine for linked mode
  6384. Return: CX = 07C2h
  6385. Note:    calling sequence for linked-mode routine
  6386.     AL = 00h send character in BL to printer
  6387.        = 01h send CX bytes from DS:DX to printer
  6388.        = 02h move print head to horizontal starting position of image
  6389.     return code for linked-mode routine:
  6390.     AX = 0000h success
  6391.        = 0001h failure
  6392. SeeAlso: AX=CD08h
  6393. ---------------------------------------------
  6394. INT 17 - INSET - START MERGING IMAGE INTO TEXT
  6395.     AX = CD05h
  6396.     DS:DX -> ASCIZ name of PIX file
  6397.     CX = left margin of text in 1/720th inch
  6398. Return: AH = printer type
  6399.         00h page-oriented (multiple images may be placed side-by-side)
  6400.         01h line-oriented (use AX=CD06h for vertical paper movement)
  6401.     CX = 07C2h (1986d)
  6402. ---------------------------------------------
  6403. INT 17 - INSET - GRAPHICS LINE FEED
  6404.     AX = CD06h
  6405. Return: AH = completion status
  6406.         00h image complete
  6407.         01h image incomplete
  6408.     CX = 07C2h (1986d)
  6409. SeeAlso: AX=CD09h
  6410. ---------------------------------------------
  6411. INT 17 - INSET - FLUSH GRAPHICS FROM MERGE BUFFER
  6412.     AX = CD07h
  6413. Return: CX = 07C2h
  6414. ---------------------------------------------
  6415. INT 17 - INSET - CANCEL LINK MODE
  6416.     AX = CD08h
  6417. Return: CX = 07C2h
  6418. SeeAlso: AX=CD04h
  6419. ---------------------------------------------
  6420. INT 17 - INSET - ALTER GRAPHICS LINE SPACING
  6421.     AX = CD09h
  6422.     CX = line spacing in 1/720th inch
  6423. Return: CX = 07C2h
  6424. Note:    not yet implemented, line spacing is currently fixed at 1/6 inch
  6425. SeeAlso: AX=CD06h
  6426. ---------------------------------------------
  6427. INT 17 - INSET - GET SETUP
  6428.     AX = CD0Ah
  6429.     DS:DX -> buffer for IN.SET data
  6430. Return: CX = 07C2h
  6431. ---------------------------------------------
  6432. INT 17 - INSET - START GETTING SCALED IMAGE
  6433.     AX = CD0Bh
  6434.     DS:SI -> ASCIZ pathname of .PIX file
  6435.     BX = number of bitplanes
  6436.     CX = number of rows in output bitmap
  6437.     DX = number of columns in output bitmap
  6438. Return: AX = status
  6439.         0000h OK
  6440.         FFFFh error    
  6441. Note:    image is returned in strips by repeated calls to AX=CD0Ch
  6442. ---------------------------------------------
  6443. INT 17 - INSET - GET NEXT IMAGE STRIP
  6444.     AX = CD0Ch
  6445. Return:    AX = status
  6446.         0000h OK but not complete
  6447.         0001h OK and image complete
  6448.         FFFFh error
  6449.     DS:SI -> buffer (max 4K) for bit map strip 
  6450.     CX = start row
  6451.     DX = number of rows
  6452.     BX = offset in bytes between bit planes
  6453. Note:    buffer may be overwritten by subsequent calls
  6454. SeeAlso: AX=CD0Bh
  6455. ---------------------------------------------
  6456. INT 18 - TRANSFER TO ROM BASIC
  6457.    causes transfer to ROM-based BASIC (IBM-PC)
  6458.    often reboots a compatible; often has no effect at all
  6459. ---------------------------------------------
  6460. INT 19 - DISK BOOT
  6461.    causes reboot of disk system (no memory test performed, interrupt vectors
  6462.    preserved).    Because interrupt vectors are preserved, this interrupt usually
  6463.    causes a system hang if any TSRs have hooked vectors from 00h through 1Ch,
  6464.    particularly INT 08.
  6465.  
  6466.    Usually, the BIOS will try to read sector 1, head 0, track 0 from drive A:
  6467.    to 0000h:7C00h.  If this fails, and a hard disk is installed, the BIOS will
  6468.    read sector 1, head 0, track 0 of the first hard disk.  This sector should
  6469.    contain a master bootstrap loader and a partition table.  After loading the
  6470.    master boot sector at 0000h:7C00h, the master bootstrap loader is given
  6471.    control.  It will scan the partition table for an active partition, and will
  6472.    then load the operating system's bootstrap loader (contained in the first
  6473.    sector of the active partition) and give it control.
  6474.  
  6475. Notes:    to accomplish a warm boot equivalent to Ctrl-Alt-Del, store 1234h in
  6476.       0040h:0072h and jump to FFFFh:0000h.  For a cold boot equivalent to
  6477.       a reset, store 0000h at 0040h:0072h before jumping.
  6478.     VDISK.SYS hooks this interrupt to allow applications to find out how
  6479.       much extended memory has been used by VDISKs (the three bytes at
  6480.       offset 2Ch in the INT 19 handler's segment contain the linear address
  6481.       of the first free extended memory).
  6482.  
  6483. Format of hard disk master boot sector:
  6484. Offset    Size    Description
  6485.  00h 446 BYTEs    Master bootstrap loader code
  6486. 1BEh 16 BYTEs    partition record for partition 1 (see below)
  6487. 1CEh 16 BYTEs    partition record for partition 2
  6488. 1DEh 16 BYTEs    partition record for partition 3
  6489. 1EEh 16 BYTEs    partition record for partition 4
  6490. 1FEh    WORD    signature, AA55h indicates valid boot block
  6491.  
  6492. Format of partition record:
  6493. Offset    Size    Description
  6494.  00h    BYTE    boot indicator (80h = active partition)
  6495.  01h    BYTE    partition start head
  6496.  02h    BYTE    partition start sector (bits 0-5)
  6497.  03h    BYTE    partition start track (bits 8,9 in bits 6,7 of sector)
  6498.  04h    BYTE    operating system indicator (see below)
  6499.  05h    BYTE    partition end head
  6500.  06h    BYTE    partition end sector (bits 0-5)
  6501.  07h    BYTE    partition end track (bits 8,9 in bits 6,7 of sector)
  6502.  08h    DWORD    sectors preceding partition
  6503.  0Ch    DWORD    length of partition in sectors
  6504.  
  6505. Values for operating system indicator:
  6506.  00h empty
  6507.  01h DOS 12-bit FAT
  6508.  02h XENIX file system
  6509.  03h XENIX /usr file system (obsolete???)
  6510.  04h DOS 16-bit FAT
  6511.  05h DOS 3.3+ extended partition
  6512.  06h DOS Large File System
  6513.  07h QNX
  6514.  08h AIX bootable partition
  6515.  09h AIX data partition
  6516.  51h Disk Manager
  6517.  52h CP/M ???
  6518.  56h GB ???
  6519.  61h SpeedStor
  6520.  63h SysV/386
  6521.  64h Novell NetWare
  6522.  75h PC/IX
  6523.  80h Minix v1.3 and below
  6524.  81h Minix v1.5+
  6525.  DBh CP/M
  6526.  E1h SpeedStor 12-bit FAT extended partition
  6527.  E4h SpeedStor 16-bit FAT extended partition
  6528.  FFh BBT ???
  6529. ---------------------------------------------
  6530. INT 1A - CLOCK - GET TIME OF DAY
  6531.     AH = 00h
  6532. Return: CX:DX = clock count
  6533.     AL = 00h if clock was read or written (via AH=0,1) since the previous
  6534.          midnight
  6535.          Otherwise, AL > 0
  6536. Note:    IBM and many clone BIOSes set the flag for AL rather than incrementing
  6537.       it, leading to loss of a day if two consecutive midnights pass
  6538.       without a request for the time (e.g. if the system is on but idle)
  6539. SeeAlso: AH=02h,INT 21/AH=2Ch
  6540. ---------------------------------------------
  6541. INT 1A - CLOCK - SET TIME OF DAY
  6542.     AH = 01h
  6543.     CX:DX = clock count
  6544. Return: time of day set
  6545. SeeAlso: AH=03h,INT 21/AH=2Dh
  6546. ---------------------------------------------
  6547. INT 1A - CLOCK - READ REAL TIME CLOCK (AT,XT286,CONV,PS)
  6548.     AH = 02h
  6549. Return: CH = hours in BCD
  6550.     CL = minutes in BCD
  6551.     DH = seconds in BCD
  6552. SeeAlso: AH=00h
  6553. ---------------------------------------------
  6554. INT 1A - CLOCK - SET REAL TIME CLOCK (AT,XT286,CONV,PS)
  6555.     AH = 03h
  6556.     CH = hours in BCD
  6557.     CL = minutes in BCD
  6558.     DH = seconds in BCD
  6559.     DL = 01h if daylight savings, 00h if standard time
  6560. Return: CMOS clock set
  6561. SeeAlso: AH=01h
  6562. ---------------------------------------------
  6563. INT 1A - CLOCK - READ DATE FROM REAL TIME CLOCK (AT,XT286,CONV,PS)
  6564.     AH = 04h
  6565. Return: DL = day in BCD
  6566.     DH = month in BCD
  6567.     CL = year in BCD
  6568.     CH = century (19h or 20h)
  6569. SeeAlso: INT 21/AH=2Ah
  6570. ---------------------------------------------
  6571. INT 1A - CLOCK - SET DATE IN REAL TIME CLOCK (AT,XT286,CONV,PS)
  6572.     AH = 05h
  6573.     DL = day in BCD
  6574.     DH = month in BCD
  6575.     CL = year in BCD
  6576.     CH = century (19h or 20h)
  6577. Return: CMOS clock set
  6578. SeeAlso: INT 21/AH=2Bh
  6579. ---------------------------------------------
  6580. INT 1A - CLOCK - SET ALARM (AT,XT286,CONV,PS)
  6581.     AH = 06h
  6582.     CH = hours in BCD
  6583.     CL = minutes in BCD
  6584.     DH = seconds in BCD
  6585. Return: CF set if alarm already set or clock inoperable
  6586.     INT 4Ah will be called when alarm goes off, every 24 hours until reset
  6587. SeeAlso: AH=07h,INT 4A
  6588. ---------------------------------------------
  6589. INT 1A - CLOCK - RESET ALARM (AT,XT286,CONV,PS)
  6590.     AH = 07h
  6591. Return: alarm disabled
  6592. SeeAlso: AH=06h
  6593. ---------------------------------------------
  6594. INT 1A - CLOCK - SET RTC ACTIVATED POWER ON MODE (CONVERTIBLE)
  6595.     AH = 08h
  6596.     CH = hours in BCD
  6597.     CL = minutes in BCD
  6598.     DH = seconds in BCD
  6599. ---------------------------------------------
  6600. INT 1A - CLOCK - READ RTC ALARM TIME AND STATUS (CONV,PS30)
  6601.     AH = 09h
  6602. Return: CH = hours in BCD
  6603.     CL = minutes in BCD
  6604.     DH = seconds in BCD
  6605.     DL = alarm status
  6606.         00h alarm not enabled
  6607.         01h alarm enabled but will not power up system
  6608.         02h alarm will power up system
  6609. ---------------------------------------------
  6610. INT 1A - CLOCK - READ SYSTEM-TIMER DAY COUNTER (XT2,PS)
  6611.     AH = 0Ah
  6612. Return: CF set on error
  6613.     CX = count of days since Jan 1,1980
  6614. SeeAlso: AH=0Bh
  6615. ---------------------------------------------
  6616. INT 1A - CLOCK - SET SYSTEM-TIMER DAY COUNTER (XT2,PS)
  6617.     AH = 0Bh
  6618.     CX = count of days since Jan 1,1980
  6619. Return: CF set on error
  6620.     CF clear if successful
  6621. SeeAlso: AH=0Ah
  6622. ---------------------------------------------
  6623. INT 1A - WORD PERFECT 5.0 Third Party Interface - INSTALLATION CHECK
  6624.     AX = 3601h
  6625. Return: DS:SI = routine to monitor keyboard input, immediately preceded by the
  6626.         ASCIZ string "WPCORP\0"
  6627. Notes:    WordPerfect 5.0 will call this interrupt at start up to determine if a
  6628.       third party product wants to interface with it.  The third party
  6629.       product must intercept this interrupt and return the address of a
  6630.       keyboard monitor routine.
  6631.     Before checking for keyboard input, and after every key entered by the
  6632.       user, Word Perfect will call the routine whose address was provided
  6633.       in DS:SI with the following parameters:
  6634.         Entry:    AX = key code or 0
  6635.             BX = WordPerfect state flag
  6636.         Exit:    AX = 0 or key code
  6637.             BX = 0 or segment address of buffer with key codes
  6638.     See the "WordPerfect 5.0 Developer's Toolkit" for further information.
  6639. ---------------------------------------------
  6640. INT 1A - PCjr - SET UP SOUND MULTIPLEXOR
  6641.     AH = 80h
  6642.     AL = 00h source is 8253 channel 2
  6643.          01h source is cassette input
  6644.          02h source is I/O channel "Audio IN"
  6645.          03h source is sound generator chip
  6646. ---------------------------------------------
  6647. INT 1A - AT&T 6300 - READ TIME AND DATE
  6648.     AH = FEh
  6649. Return: BX = day count (0 = Jan 1, 1984)
  6650.     CH = hour
  6651.     CL = minute
  6652.     DH = second
  6653.     DL = hundredths
  6654. SeeAlso: AH=FFh,INT 21/AH=2Ah,2Ch
  6655. ---------------------------------------------
  6656. INT 1A - AT&T 6300 - SET TIME AND DATE
  6657.     AH = FFh
  6658.     BX = day count (0 = Jan 1, 1984)
  6659.     CH = hour
  6660.     CL = minute
  6661.     DH = second
  6662.     DL = hundredths
  6663. Return: ???
  6664. SeeAlso: AH=FEh,INT 21/AH=2Bh,2Dh
  6665. ---------------------------------------------
  6666. INT 1B - CTRL-BREAK KEY
  6667.    This interrupt is called when the keyboard scanner of the IBM
  6668.    machines detects CTRL and BREAK pressed at the same time. It
  6669.    normally points to a short routine in DOS which sets the
  6670.    Ctrl-C flag, thus invoking INT 23h the next time DOS checks
  6671.    for Ctrl-C.
  6672. SeeAlso: INT 23
  6673. ---------------------------------------------
  6674. INT 1C - CLOCK TICK
  6675.    This interrupt is called (in the IBM) at the end of each time-update
  6676.    operation by the time-of-day routines.
  6677. Notes:    points to an IRET by default
  6678.     preferred interrupt to chain when a program needs to be invoked
  6679.       regularly
  6680. SeeAlso: INT 08
  6681. ---------------------------------------------
  6682. INT 1D - (NOT a vector!) 6845 VIDEO INIT TABLES
  6683.  
  6684. Format of video init tables:
  6685. Offset    Size    Description
  6686.  00h 16 BYTEs    table for modes 0 and 1        \
  6687.  10h 16 BYTEs    table for modes 2 and 3         \  each table contains values
  6688.  20h 16 BYTEs    table for modes 4, 5, and 6     /  for first sixteen 6485 regs
  6689.  30h 16 BYTEs    table for mode 7        /
  6690.  40h    WORD    size of video RAM for modes 0 and 1
  6691.  42h    WORD    size of video RAM for modes 2 and 3
  6692.  44h    WORD    size of video RAM for modes 4 and 5
  6693.  46h    WORD    size of video RAM for modes 6 and 7
  6694.  48h  8 BYTEs    number of colums in each of modes 0 through 7
  6695.  50h  8 BYTEs    video controller mode byte for each mode
  6696. ---------------------------------------------
  6697. INT 1E - (NOT a vector!) DISKETTE PARAMS (BASE TABLE)
  6698.     default parameters at F000h:EFC7h in PC and most compatibles
  6699. SeeAlso: INT 41
  6700.  
  6701. Format of diskette parameters:
  6702. Offset    Size    Description
  6703.  00h    BYTE    4-bit step rate & 4-bit head unload times
  6704.  01h    BYTE    7-bit head load time & 1-bit DMA flag
  6705.  02h    BYTE    motor off time in clock ticks (36 to 38 typical)
  6706.  03h    BYTE    sector size in bytes (0->128, 1->256, 2->512, 3->1024)
  6707.  04h    BYTE    last sector number (8 or 9 typical)
  6708.  05h    BYTE    inter-sector gap size on read/write (42 typical)
  6709.  06h    BYTE    data transfer length (255 typical)
  6710.  07h    BYTE    inter-sector gap size on format (80 typical)
  6711.  08h    BYTE    sector fill on format (F6h typical)
  6712.  09h    BYTE    head-settle time ms (typical 25, 1.10->0, 2.10->15, 3.10->1)
  6713.  0Ah    BYTE    motor start-up time (1/8 secs) (typical 4, 2.10->2)
  6714. ---------------------------------------------
  6715. INT 1F - (NOT a vector!) GRAPHICS SET 2
  6716.     pointer to bitmaps for high 128 chars (eight bytes per character)
  6717. ---------------------------------------------
  6718.